1.FutureTask获取异步执行的数据
场景:异步执行10次1+。。。+99的计算结果,然后再执行主业务逻辑,最后获取每次执行的结果,再把10次的计算结果相加
public static void main(String[] args) throws InterruptedException, ExecutionException {
ExecutorService executorService=Executors.newFixedThreadPool(5);
List<FutureTask<Integer>> list=new ArrayList<>();
for (int i=0;i<10;i++){
FutureTask<Integer> futureTask=new FutureTask<Integer>(new MyCallable(""+i));
list.add(futureTask);
executorService.submit(futureTask);
}
System.out.println("子任务已经全部提交完成,继续执行主任务");
TimeUnit.MILLISECONDS.sleep(5000);
//开始计算异步执行的结果
Integer totalResult = 0;
for (int j=0;j<list.size();j++){
totalResult+=list.get(j).get();
}
System.out.println(totalResult);
//不要忘记关掉线程
executorService.shutdown();
}
static class MyCallable implements Callable<Integer> {
private String threadName;
public MyCallable(String threadName){
this.threadName=threadName;
}
@Override
public Integer call() throws Exception {
int result=0;
for (int i=0;i<100;i++){
result+=i;
}
//为了说明异步执行,sleep5秒
TimeUnit.MILLISECONDS.sleep(5000);
System.out.println("子任务==="+threadName+"===执行完成,结果是:"+result);
return result;
}
}
2.