0

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

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

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

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

4

1 回答 1

0

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

于 2013-01-21T15:38:46.900 回答