Многопоточность senior
Как исправить?
Ответ
Два рабочих варианта. Первый — создать свой ForkJoinPool под конкретную задачу и передать параллельный стрим внутрь его submit(...).get(), чтобы тяжёлая/блокирующая работа не занимала общий commonPool. Второй — вообще не использовать parallelStream для блокирующих операций.
Разбор: Корректное решение — выполнять параллельный стрим внутри своего ForkJoinPool через его submit(...).get(), чтобы тяжёлая/блокирующая работа не занимала общий commonPool, который делят все parallelStream приложения (альтернатива — вообще не использовать parallelStream для блокирующих операций). Ловушка: расширение common.parallelism лишь меняет размер общего пула, не изолируя задачу; .parallel() в конце всё равно уходит в тот же commonPool; а CompletableFuture.supplyAsync без явного executor'а по умолчанию исполняется тем же ForkJoinPool.commonPool().
Хочешь так же по своей компании — с вопросами по грейдам и задачами? Закажи гайд или забери свежее в Telegram.