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.

Заказать гайд Пройти тест
новые гайды и свежие вопросы с собесов — первыми в Telegram Смотреть гайды Подписаться