想象一下,我们遍历一个集合并提交要在后台运行的任务
class Processor {
public void process(Iterable<Item> items, ExecutorService executorService) {
for (Item item : items) {
doStandardProcess(item);
if (needSpecialProcess(item)) {
executorService.submit(createSpecialTaskFor(item));
}
}
}
}
程序流程如下:
- 从某处接收物品
- 创建处理器并处理它们
- 将结果发送到某个地方
结果取决于后台处理,所以 p.3 应该等到所有任务都完成。我知道可以通过 and 的组合来实现shutdown()
,awaitTermination()
但我不想关闭服务。也有可能调用invokeAll(List tasks)
,但如您所见,任务是在遍历过程中一一创建的。
如何在给定的限制下实现等待完成?
PS如果不清楚,另一个限制是在遍历项目的同时并行运行后台任务,因为后台任务比基本处理操作多花费x100时间。