Java 为什么ExecutorService.invokeAll()会返回未来的列表?
Java 为什么ExecutorService.invokeAll()会返回未来的列表?,java,concurrency,Java,Concurrency,invokeAll()在提交的集合中的所有可调用的s都完成之前不会返回,那么生成结果Futures的原因是什么呢?检查 执行给定的任务,返回保存任务的未来列表 全部完成时的状态和结果。Future.isDone()对于每个 返回的列表的元素请注意,已完成的任务可能 正常终止或通过抛出异常终止。结果 如果给定集合在 此操作正在进行中 这意味着我们将获得一个未来对象的列表,因为即使任务已完成,我们也可能无法获得值。因为任务可能会正常或异常终止,未来可以为您包装异常。比如说, Callable<
invokeAll()
在提交的集合中的所有可调用的s都完成之前不会返回,那么生成结果Future
s的原因是什么呢?检查
执行给定的任务,返回保存任务的未来列表
全部完成时的状态和结果。Future.isDone()对于每个
返回的列表的元素请注意,已完成的任务可能
正常终止或通过抛出异常终止。结果
如果给定集合在
此操作正在进行中
这意味着我们将获得一个未来
对象的列表,因为即使任务已完成,我们也可能无法获得值。因为任务可能会正常或异常终止,未来
可以为您包装异常。比如说,
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());
}
可调用c1=()->1;
可调用c2=()->{
抛出新的RuntimeException();
};
List futures=executor.invokeAll(Arrays.asList(c1,c2));
for(未来:未来){
System.out.println(future.get());
}
请注意,由于Future
,我们能够得到正常终止的Future和异常终止的Future的结果
如果invokeAll
返回了一个列表
,则必须返回成功完成的列表,并丢弃有异常的列表 你看到了吗。请看一看,特别是Boris的答案,如果这回答了你的一些问题,请告诉我。