等待任何已完成的可调用 return 值在可调用列表中完成后立即等待

wait for any finished callable return value as soon as it finished in list of callables

TL;DR:我希望能够等待所有 Future,但在每个可调用函数完成后立即获取 return 值。

假设我有多个可调用对象 运行 使用执行程序。 如果我有一个 Futures 列表,是否有任何优雅的方法来获取任何已完成任务的返回值,而不是继续以相同的方式等待其余任务?

这就是 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.
}