N 個のタスクがあり、それらを N 個のスレッドで並列に処理したい。すべてのタスクが完了するまで待機し、結果を保存してから、次の N 個のタスクを実行します (ループ内など)。
Java util concurrency からのどの抽象化がここで役立ちますか?
を見ましたExecutorService.invokeAll()
が、先物のリストが返されるので、すべてが完了するまですべてをループで反復する必要があります。
一連のタスクを計算するもっと簡単な方法があるはずだと思いました。
N 個のタスクがあり、それらを N 個のスレッドで並列に処理したい。すべてのタスクが完了するまで待機し、結果を保存してから、次の N 個のタスクを実行します (ループ内など)。
Java util concurrency からのどの抽象化がここで役立ちますか?
を見ましたExecutorService.invokeAll()
が、先物のリストが返されるので、すべてが完了するまですべてをループで反復する必要があります。
一連のタスクを計算するもっと簡単な方法があるはずだと思いました。
使用できますExecutorCompletionService
-Future
完了した順序で s を取得できます。
まだ小さな while ループがあり、すべてが完了した後に呼び出したいコードはループの後にあります。それでいいと思います。
CyclicBarrier を使用することをお勧めします。このようにして、すべてのスレッドがジョブを完了するまで待ってから、次の一連のタスクを開始できます。
JAVA 7 を使用している場合は、Fork/Join フレームワークをお勧めします。説明したいと思いますが、この記事は私が言えることよりもはるかに優れています: http://www.oracle.com/technetwork/articles/java/fork-join-422606.html