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 版权协议,转载请附上原文出处链接和本声明。