java—等待任何已完成的可调用返回值在可调用列表中完成

hmtdttj4  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(400)

热释光;博士:我希望能够等待所有的期货,但得到的回报值,每个可赎回一旦完成。
假设我使用一个执行器运行多个callable。如果我有一个未来的清单,有没有什么优雅的方法来获得任何已完成任务的回报值,然后继续以同样的方式等待剩余的任务?

xoshrz7s

xoshrz7s1#

那是什么 ExecutorCompletionService 是给你的。

Executor executor = ...;
List<Callable<T>> tasks = List.of(...);
CompletionService<T> completionService = new ExecutorCompletionService<>(executor);
tasks.forEach(completionService::submit);
for (int i = 0; i < tasks.size(); i++) {
    T result = completionService.take().get();
    // A task has completed. Use its result.
}

相关问题