场景:
1.用线程池执行多个线程。
2.每一个线程都有返回值。
3.然后将每个线程的返回结果汇总。
思路:
1.返回值,于是想到用callable,future,其他两种线程执行方式都是没有返回值的。
2.判定所有线程执行完成?
解决方法:
import java.util.concurrent.Callable;
/**
* @author jiayq
* @date 2020/4/29 18:00
*/
public class CountCallable implements Callable<Integer> {
@Override
public Integer call() throws Exception {
return 1;
}
}
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class Test {
public static void main(String[] args) {
// 创建一个线程池
ExecutorService pool = Executors.newFixedThreadPool(3);
//存储结果
List<Future<Integer>> futureList = new ArrayList<Future<Integer>>();
for(int i = 0;i < 10;i++){
CountCallable c = new CountCallable();
Future<Integer> f = pool.submit(c);
futureList.add(f);
}
//暂停pool的sunbmit,但是还在运行
pool.shutdown();
int count = 0;
while(true){
if(pool.isTerminated()){ //运行完成
for(Future<Integer> a: futureList){
try{
count += a.get().intValue();
} catch (Exception e){
e.printStackTrace();
}
}
break;
}
}
System.out.println(count);
}
}
一共十个线程,最后结果输出10。