Почему .parallel() — проблема?

Ответ

parallel() и parallelStream() под капотом используют ForkJoinPool.commonPool() — один общий пул на всё JVM-приложение с размером по числу ядер. Поэтому одна блокирующая или тяжёлая задача душит все остальные параллельные стримы, деля с ними этот единственный пул.

Разбор: Главная беда parallel() — все параллельные стримы делят один общий ForkJoinPool.commonPool() на всю JVM, поэтому одна блокирующая или тяжёлая задача душит остальные, а размер пула фиксирован числом ядер. Ловушка: новый пул на каждый вызов не создаётся, порядок для корректно ассоциативных reduce сохраняется (forEachOrdered/collect это учитывают), и поэлементной сериализации нет — речь о разделяемом ресурсе и блокировках в нём.

Хочешь так же по своей компании — с вопросами по грейдам и задачами? Закажи гайд или забери свежее в Telegram.

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