Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么ExecutorService.invokeAll()会返回未来的列表?_Java_Concurrency - Fatal编程技术网

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的答案,如果这回答了你的一些问题,请告诉我。