【发布时间】:2015-04-04 20:04:19
【问题描述】:
我知道shutdown() 和awaitTermination() 存在。问题是池中的可运行对象需要能够添加未知数量的其他可运行对象(不能使用倒计时),如果我调用shutdown(),这些任务将被拒绝。我怎么知道它们什么时候完成?
【问题讨论】:
-
当一个任务 (
Runnable) T 产生另外 n 个任务时,当所有这 n 个任务都完成时,你会说这个任务 T 完成了吗?那么任务 T 与其子任务之间是否存在(概念上的)依赖关系? -
对。我忽略了我正在使用
newFixedThreadPool,其中运行线程的最大数量是处理器的数量。一旦一个runnable产生了其他的,它就没有更多的工作要做了。如果它一直等到它生成的可运行对象完成,它就会坐在那里什么都不做,并且由于线程数的限制,程序永远不会结束。 -
因此您可能应该使用
ForkJoinTask。
标签: java multithreading runnable executorservice