Java多线程执行处理业务时间太久解决方法代码示例-创新互联

背景:在政府开发了一个应用系统,主要功能是让企业填写企业资质信息,然后通过给定的公式,统计这一系列的信息,以得分的形式展示给政府领导查看。目前有1300家企业填报。由于得分是实时显示的,所以导致统计功能很慢。

创新互联是专业的兰溪网站建设公司,兰溪接单;提供成都网站设计、成都网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行兰溪网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

代码运行流程

1、查出1300企业信息


2、遍历1300企业信息,ji计算每家企业得分信息。每家预计时间为0.3秒。合计390秒。导致页面请求超时

3、导出(用jxl jar)

解决方案:

由于处理业务的,所以需要能有返回值的线程。用:Callable

直接上代码

1、调用线程的代码

List<Map<String,Object>> list = (List<Map<String, Object>>) map.get("rows");
int taskSize = 20;
// 创建一个线程池
ExecutorService pool = Executors.newFixedThreadPool(taskSize);
// 创建多个有返回值的任务 
List<Future> listFuture = new ArrayList<Future>();
for (int i = 0; i < taskSize; i++) {
	System.out.println("我启用多线程啦啦啦");
	int evgCount = list.size()/taskSize;
	Callable c = new MyCallable(list.subList(evgCount*i, evgCount*(i+1)),session,staticFlag,
	declareService,declareMasterService,enterpriseQueryService);
	// 执行任务并获取Future对象
	Future f = pool.submit(c);
	listFuture.add(f);
}
pool.shutdown();
// 获取所有并发任务的运行结果 
List<Map<String, Object>> listResult = new ArrayList<Map<String, Object>>();
for (Future f : listFuture) {
	List<Map<String, Object>> listModel = new ArrayList<Map<String, Object>>();
	try {
		listModel = (List<Map<String, Object>>) f.get();
	}
	catch (InterruptedException e) {
		e.printStackTrace();
	}
	catch (ExecutionException e) {
		e.printStackTrace();
	}
	listResult.addAll(listModel);
}
map.put("rows", listResult);

文章名称:Java多线程执行处理业务时间太久解决方法代码示例-创新互联
网页地址:https://www.cdcxhl.com/article24/hhije.html

成都网站建设公司_创新互联,为您提供网站策划定制网站Google微信公众号营销型网站建设动态网站

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都定制网站网页设计