yohhoyの日記

技術的メモをしていきたい日記

Stream API並列実行スレッドプールを明示指定

Java 8で導入されたStream APIの並列ストリーム処理において、実行するスレッドプールを明示指定する方法。Stream APIの既定動作では ForkJoinPoolの共通スレッドプール を利用する。*1

import static java.util.stream.IntStream.range;
// 一般に論理プロセッサ数の並列度で実行
range(1, 1000000).parallel().filter(...).collect(...);
// 2並列ForkJoinPool上で並列実行
ForkJoinPool forkJoinPool = new ForkJoinPool(2);
forkJoinPool.submit(() ->
  range(1, 1000000).parallel().filter(...).collect(...)
).get();

関連URL

*1:ForkJoinPool共通スレッドプールの並列度は getCommonPoolParallelismメソッド で取得可能。