189 8069 5689

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

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

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

代码运行流程

1、查出1300企业信息


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

3、导出(用jxl jar)

解决方案:

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

直接上代码

1、调用线程的代码

List> list = (List>) map.get("rows");
int taskSize = 20;
// 创建一个线程池
ExecutorService pool = Executors.newFixedThreadPool(taskSize);
// 创建多个有返回值的任务 
List listFuture = new ArrayList();
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> listResult = new ArrayList>();
for (Future f : listFuture) {
	List> listModel = new ArrayList>();
	try {
		listModel = (List>) f.get();
	}
	catch (InterruptedException e) {
		e.printStackTrace();
	}
	catch (ExecutionException e) {
		e.printStackTrace();
	}
	listResult.addAll(listModel);
}
map.put("rows", listResult);

网站栏目:Java多线程执行处理业务时间太久解决方法代码示例-创新互联
转载来源:http://jkwzsj.com/article/hhije.html

其他资讯