有返回值的多线程提高响应速度

  • Post author:
  • Post category:其他


0.业务返回值集合

List<DeptClue> list1 = new ArrayList<DeptClue>();

1.创建一个线程池,线程个数为10 (10可替换为业务需求替换)

ExecutorService fixedThreadPool = Executors.newFixedThreadPool(10);

2.创建一个返回值集合 泛型为返回值的类型 (DeptClue 泛型类型根据业务需求替换, dCode 入参根据业务需求替换 )

List<FutureTask<DeptClueCount>> futureList = new ArrayList<FutureTask<DeptClueCount>>();
for(DeptClue  dCode : DeptClueList){
//多个线程调用
FutureTask<DeptClue> futureTask = new FutureTask<DeptClue>(new MyCallable(dCode));
fixedThreadPool.submit(futureTask);
  futureList.add(futureTask);
}

3.future.get() 具有线程阻塞 所有放在左后使用while循环遍历结果

使用双重while 循环 获取返回值集合中的值 (DeptClue 泛型类型根据业务需求替换,list1将每个线程返回的结果放在一个集合中 业务需求可替换)

//while循环条件 返回值集合大小是否大于0
	while (futureList.size() > 0) {
						//获取返回值集合迭代器
	                    Iterator<FutureTask<DeptClue>> iterable = futureList.iterator();
	                    //遍历迭代器
	                    while (iterable.hasNext()) {
	                        Future<DeptClue> future = iterable.next();
	                        //如果任务完成取结果,否则判断下一个任务是否完成
	                        if (future.isDone() && !future.isCancelled()) {
	                            //获取结果
	                            list1.add(future.get());
	                            // 任务完成移除任务
	                            iterable.remove(); }
	                    }
	                }

4.创建一个内部类 MyCallable 实现 Callable接口 泛型类型为返回值类型 (DeptClue泛型类型根据业务需求替换, dCode 入参根据业务需求替换 )

class MyCallable implements Callable<DeptClue> {
	        private DeptClue dCode;
	        //通过构造方法给变量赋值
	        MyCallable(DeptClue deptClue) {
	            this.dCode = deptClue;
	        }
	        public DeptClue call() throws Exception {
	           //具体的业务代码
	           .....
	           .......
	            return deptClue;
	        }
	    }



版权声明:本文为weixin_43899656原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。