0

ForkJoinとFixedSizeThreadPoolで問題の2つの実装を行い、それらのパフォーマンスを比較したいと思います。私の問題では、各タスクがいくつかのサブタスクを作成し、それらをエグゼキュータサービスに再度送信します。fork-joinの実装では、fork()を使用し、もう1つの実装ではexecute()を使用します。

明らかに、私のメインスレッドはすべての作業が終了するまで待つ必要があります。フォークジョインでは、isQuiescent()プロパティを適切にチェックして、すべてが終了したことを確認できますが、それ以外の場合は、作成したタスクの数と終了したタスクの数を手動で数える以外に何も考えられません。このソリューションは機能しますが、共有変数が犠牲になり、明らかにパフォーマンスが低下します。

サブタスクがスケジュールされないため、shutdown()を使用することはできません(RejectedExecutionExceptionが発生します)。

タスクを数えるよりも良い解決策を知っている人はいますか?

4

1 に答える 1

0

実際には、shutdownは、以前に送信されたすべてのタスクが終了するまで待機します。ユースケースについては、をご覧くださいExecutorCompletionService

于 2013-01-21T15:38:46.900 に答える