ExecutorService executorService = Executors.newSingleThreadExecutor();
Set<Callable<String>> callables = new HashSet<Callable<String>>();
callables.add(new Callable<String>() {
public String call() throws Exception {
return "Task 1";
}
});
callables.add(new Callable<String>() {
public String call() throws Exception {
return "Task 2";
}
});
callables.add(new Callable<String>() {
public String call() throws Exception {
return "Task 3";
}
});
List<Future<String>> futures = executorService.invokeAll(callables);
for(Future<String> future : futures){
System.out.println("future.get = " + future.get());
}
对于这段代码,我的问题是“invokeAll()是一个阻塞调用吗”? 也就是说,当代码运行到invokeAll()这一行时,我们是否会在那里阻塞等待所有结果生成?
future.get()
会阻塞程序。 - Petr Janeček