Ответ
Параллельный стрим (parallelStream()) по умолчанию использует потоки из общего пула (common pool) ForkJoinPool. Уровень параллелизма этого пула равен Runtime.getRuntime().availableProcessors() - 1.
Пример:
List<Integer> numbers = List.of(1, 2, 3, 4, 5);
System.out.println("Доступных процессоров: " + Runtime.getRuntime().availableProcessors());
numbers.parallelStream()
.forEach(i -> System.out.println(Thread.currentThread().getName()));
// Вывод будет содержать имена потоков вида 'ForkJoinPool.commonPool-worker-N'
Как управлять количеством потоков?
По умолчанию изменить нельзя, но можно запустить параллельный стрим внутри своего экземпляра ForkJoinPool:
ForkJoinPool customPool = new ForkJoinPool(4); // Пул с 4 потоками
customPool.submit(() ->
list.parallelStream() // Теперь стрим использует customPool, а не commonPool
.forEach(...)
).join();
Важно: Это глобальная настройка для common pool. Изменять ее для всего приложения через системное свойство java.util.concurrent.ForkJoinPool.common.parallelism не рекомендуется без веских причин.