Java Core middle
Parallel streams: в чём опасность?
Ответ
Все parallel streams делят общий ForkJoinPool.commonPool() с числом потоков по числу ядер. Если один параллельный стрим заблокировался на I/O — пул исчерпывается и остальные ждут. Решение: кастомный ForkJoinPool, например new ForkJoinPool(4).submit(() -> stream.parallel()...).get().
Разбор: Все parallel stream по умолчанию используют один общий ForkJoinPool.commonPool с числом потоков по числу ядер; блокирующая операция в одном стриме исчерпывает пул и тормозит все остальные. Первый дистрактор неверно утверждает поток на элемент, второй — изолированные пулы (на деле пул общий), третий — порядок при collect(toList()) как раз сохраняется (parallel влияет лишь на forEach без forEachOrdered), так что это не основная опасность.
Хочешь так же по своей компании — с вопросами по грейдам и задачами? Закажи гайд или забери свежее в Telegram.