Ответ
Да, параллельные стримы (например, созданные через Collection.parallelStream()) по умолчанию используют общий пул потоков ForkJoinPool.commonPool().
Почему это важно:
- Общий ресурс: Все параллельные стримы в JVM делят один пул, что может привести к конкуренции и снижению производительности, если несколько задач выполняются одновременно.
- Настройка: Можно запустить стрим в собственном пуле, передав его в
ForkJoinPool.
Пример использования общего пула:
List<Integer> numbers = List.of(1, 2, 3, 4, 5);
long sum = numbers.parallelStream() // Использует ForkJoinPool.commonPool()
.mapToInt(i -> i)
.sum();
Пример использования кастомного пула:
ForkJoinPool customPool = new ForkJoinPool(4);
long sum = customPool.submit(() ->
numbers.parallelStream() // Теперь использует customPool
.mapToInt(i -> i)
.sum()
).get();
Best practice: Для изоляции и контроля производительности критичных задач используйте отдельный ForkJoinPool.