[英]Why does ExecutorService.invokeAll() return a List of Future?
在提交的Collection
所有Callable
都完成之前, invokeAll()
不会返回,那么产生结果Future
的原因是什么?
由于任务可能正常或异常终止,因此Futures
可以为您包装异常。 例如,
Callable<Integer> c1 = () -> 1;
Callable<Integer> c2 = () -> {
throw new RuntimeException();
};
List<Future<Integer>> futures = executor.invokeAll(Arrays.asList(c1,c2));
for (Future<Integer> future : futures) {
System.out.println(future.get());
}
请注意,由于使用了Future
,我们可以获得正常终止和异常终止的future的结果。
如果invokeAll
返回了List<T>
,则它必须返回成功完成的那些并丢弃有异常的那些。
执行给定的任务,并在所有任务完成时返回保存其状态和结果的期货列表。 Future.isDone()对于返回列表的每个元素为true。 请注意,已完成的任务可能已正常终止,也可能引发异常。 如果在进行此操作时修改了给定的集合,则此方法的结果不确定。
意味着我们正在获取Future
对象的列表,因为在某些情况下,即使任务已完成,我们也无法获得值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.