gpt4 book ai didi

java - 如何等待ExecutorService中所有提交的任务完成而不关闭?

转载 作者:行者123 更新时间:2023-12-01 11:22:12 24 4
gpt4 key购买 nike

假设我们遍历一个集合并提交要在后台运行的任务

class Processor {
public void process(Iterable<Item> items, ExecutorService executorService) {
for (Item item : items) {
doStandardProcess(item);
if (needSpecialProcess(item)) {
executorService.submit(createSpecialTaskFor(item));
}
}
}
}

程序流程如下:

  1. 从某处接收元素
  2. 创建处理器并处理它们
  3. 将结果发送到某个地方

结果取决于后台处理,因此 p.3 应该等到所有任务完成。我知道可以通过 shutdown()awaitTermination() 的组合来实现,但我不想关闭该服务。也可以调用 invokeAll(Listtasks),但正如您所见,任务是在遍历过程中一个接一个地创建的。

如何在给定的限制下实现等待完成?

附注如果不清楚,另一个限制是与项目遍历并行运行后台任务,因为后台任务比基本处理操作多花费 100 倍的时间。

最佳答案

您可以存储 future :

List<Future> futures = new ArrayList<> ();
//in the for loop
futures.add(executorService.submit(createTaskFor(item)));

//after for loop + add exception handling
for (Future f : futures) f.get();
//at this point all tasks have finished

关于java - 如何等待ExecutorService中所有提交的任务完成而不关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31098457/

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