繁体   English   中英

为什么ExecutorService.invokeAll()返回Future列表?

[英]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> ,则它必须返回成功完成的那些并丢弃有异常的那些。

检查ExecutorService#invokeAll Javadoc

执行给定的任务,并在所有任务完成时返回保存其状态和结果的期货列表。 Future.isDone()对于返回列表的每个元素为true。 请注意,已完成的任务可能已正常终止,也可能引发异常。 如果在进行此操作时修改了给定的集合,则此方法的结果不确定。

意味着我们正在获取Future对象的列表,因为在某些情况下,即使任务已完成,我们也无法获得值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM