【发布时间】:2018-09-22 04:41:21
【问题描述】:
我有下面的 ExecutorService 代码。
try{
ExecutorService executor = Executors.newFixedThreadPool(5);
List<Callable<String>> taskList = new ArrayList<Callable<String>>(5);
for(int i=1;i<=5;i++){
taskList.add(new SimpleTask());
}
List<Future<String>> list = executor.invokeAll(taskList);
executor.shutdown();
System.out.println(list.get(0).get());
System.out.println("Exit");
}catch(Exception e){
e.printStackTrace();
}
class SimpleTask implements Callable<String> {
@Override
public String call() throws Exception {
return new Date().toString();
}
}
我想知道list.get(0).get()会等待所有任务完成吗?
【问题讨论】:
-
不,它只会等待一个
Future(第一个)完成 -
正如袋熊所说,不。那么,您是在寻找方法来做到这一点还是回答了您的问题?
-
我在 call() 中设置了断点并跳过第一个任务。然后也等待所有任务完成。
-
如果你在
call()中设置了一个断点,你将不得不跳过它五次,因为这就是它被调用的频率。这听起来像是它在等待的原因。
标签: java executorservice