java - 为什么 ExecutorService.invokeAll() 会返回一个 Future 列表?

标签 java concurrency

invokeAll() 直到提交的 Collection 中的所有 Callable 都完成后才会返回,那么是什么原因使结果 Futures?

最佳答案

因为任务可能正常或异常终止,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> ,它必须返回那些成功完成的并丢弃那些有异常的。

关于java - 为什么 ExecutorService.invokeAll() 会返回一个 Future 列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37367513/

相关文章:

java - 同时移动两个具有不同且不断变化的文本的图形

java - 如何从 Maven POM 中的文件设置构建属性?

java - org.hibernate.QueryException : could not resolve property: filename

java - LMax Disruptor 和 Rx Framework 概念是否并行?

java - 迁移到 Linux 后的 Collections.synchronizedMap(Map) - 第二个线程看不到新条目

c# - .NET 中的 Erlang 风格的轻量级进程

java - 转换 Map<Integer, Set<Object>>

java - 使用第三列进行二维数组排序

postgresql - 在 PL/pgSQL 函数中检测到死锁

java - 我对同步块(synchronized block)的假设是否正确?