こんにちは。 エキサイト株式会社の三浦です。
以前、Javaで並列処理を行う方法として ParallelStream
を紹介しました。
今回は、 ParallelStream
で並列処理をする際に、最大並列数を変更する方法を紹介します。
ParallelStreamと並列数
上記の記事で紹介したとおり、 ParallelStream
を使うとJavaで並列処理を実装することが出来ます。
ただし、デフォルトの最大並列数は「稼働コンピュータのコア数 - 1」となっているため、例えば「APIにリクエストする」のように、アプリケーションのコンピューティング能力自体はそこまで必要ではなく待機時間が多いような処理のような、もっと並列数を増やしたい場合も出てきます。
そのような時は、 ForkJoinPool
を使うと解決できます。
ForkJoinPoolとParallelStream
ForkJoinPool
を使うと、複数の処理を並列で実行することが出来ます。
基本的には ForkJoinTask
と呼ばれるタスクを並列実行するためのものですが、 ParallelStream
で使用することも出来ます。
final ForkJoinPool pool = new ForkJoinPool(100); // 必要な最大並列数を指定 pool.submit(() -> sampleList .parallelStream() // pool内で実行することで、poolで指定した最大並列数が適用される .forEach(sample -> this.sampleProcess(sample)) ).get(); // get() で、すべての並列処理が終了するのを待ち合わせる pool.shutdown(); // poolを終了する
ParallelStream
だけを使うのに比べると少しだけ複雑になりますが、それでもまだ十分にシンプルと言えるレベルでしょう。
最後に
並列処理は、適切な並列数にすることで全体の処理時間が大幅に減る可能性があります。
並列化したい処理を見て、もし最大並列数が多いほうが良いのであれば、是非活用していきましょう。
ちなみに、 ForkJoinPool
と ForkJoinTask
は、名前は似ていますが別物です(Pool
は実行環境、 Task
は実行するタスクそのもの)。
調べていると少しごっちゃになりやすいので、注意するといいかもしれません。