当向线程池提交callable任务后,我们可能需要一次性获取所有返回结果,有三种处理方法。
方法一:自己维护返回结果
// 创建一个线程池
ExecutorService executorService = Executors.newFixedThreadPool(10);
// 存储执行结果的List
List<Future<String>> results = new ArrayList<Future<String>>();
// 提交10个任务
for ( int i=0; i<10; i++ ) {
Future<String> result = executorService.submit( new Callable<String>(){
public String call(){
int sleepTime = new Random().nextInt(1000);
Thread.sleep(sleepTime);
return "线程"+i+"睡了"+sleepTime+"秒";
}
} );
// 将执行结果存入results中
results.add( result );
}
// 获取10个任务的返回结果
for ( int i=0; i<10; i++ ) {
// 获取包含返回结果的future对象
Future<String> future = results.get(i);
// 从future中取出执行结果(若尚未返回结果,则get方法被阻塞