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

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;
	        }
	    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值