gpt4 book ai didi

java - executorService 如何将任务 `i` 的结果存储在 `array[i]` 中?

转载 作者:行者123 更新时间:2023-12-03 12:48:19 24 4
gpt4 key购买 nike

我读了这个post关于executorService

当顺序很重要时,我想填充固定大小的结果集合。

当我知道任务 i 应该将其结果存储在 array[i] 中时,我可以填充一个数组。

是否有另一种内置方法可以按照任务提交的顺序存储结果?我可以填充列表而不是数组吗?

最佳答案

你可以使用 Executors.invokeAll()方法。来自 javadocs:

Parameters:

tasks - the collection of tasks

Returns:

A list of Futures representing the tasks, in the same sequential order as produced by the iterator for the given task list, each of which has completed.

ExecutorService executor = Executors.newFixedThreadPool(SOME_SIZE);

Collection<Callable<T>> tasks = ...; // fill collection with callable tasks

List<Future<T>> futures = executor.invokeAll(tasks);

invokeAll() 在所有提交的任务完成执行时返回。

然后遍历返回的 futures 并对它们中的每一个调用 get():

List<T> results = 
futures.stream().map(Future::get).collect(Collectors.toList());

结果顺序将与 tasks 集合中的一个相匹配。

在一行中:

List<T> results = 
executor.invokeAll(tasks).stream().map(Future::get).collect(Collectors.toList());

关于java - executorService 如何将任务 `i` 的结果存储在 `array[i]` 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29328769/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com