Ответ
По умолчанию ForkJoinPool создает количество потоков, равное количеству доступных процессоров (Runtime.getRuntime().availableProcessors()). Это значение определяет уровень параллелизма (parallelism) пула.
Пример:
ForkJoinPool commonPool = ForkJoinPool.commonPool();
System.out.println(commonPool.getParallelism()); // Выведет, например, 8 на 8-ядерном процессоре
Важные детали:
- Общий пул (commonPool): Используется по умолчанию для параллельных операций (например, в
CompletableFutureи параллельных стримах). Его уровень параллелизма равенколичество_ядер - 1. - Создание кастомного пула: Можно задать свое значение через конструктор.
ForkJoinPool customPool = new ForkJoinPool(16); // Пул с параллелизмом 16 - Принцип работы: Пул использует алгоритм work-stealing — простаивающие потоки "крадут" задачи из очередей занятых потоков, что повышает утилизацию ресурсов.
- Фактическое число потоков: Может быть меньше уровня параллелизма, если задачи не требуют такого количества, или временно больше для компенсации блокирующих операций.