Java中的非fork-join执行程序服务中是否存在等效的isQuiescent?

时间:2013-01-21 15:11:02

标签: java multicore executorservice fork-join

我在ForkJoin和FixedSizeThreadPool中实现了我的问题的两个实现,我想比较它们的性能。在我的问题中,每个任务都会创建一些子任务,并将它们再次提交给执行程序服务。在fork-join实现中,我使用fork(),而在另一个实现中,我使用execute()。

显然,我的主线程需要等到整个工作完成。在fork-join中,我可以优雅地检查isQuiescent()属性以确保一切都已完成,但在另一种情况下,我想不出比手动计算我创建了多少任务以及完成了多少任务更好的事情!这个解决方案有效,但是以共享变量为代价显然会降低我的性能。

我不能只使用shutdown(),因为这样就不会安排子任务(他们会得到RejectedExecutionException)。

有谁知道比计算任务更好的解决方案?

1 个答案:

答案 0 :(得分:0)

实际上,shutdown会等待所有先前提交的任务完成。对于您的用例,请查看ExecutorCompletionService