Выбор ответа Middle java.util.concurrent и виртуальные потоки обновлено

Опасность newFixedThreadPool

Вопрос

Чем опасен Executors.newFixedThreadPool(10) в сервисе под пиковой нагрузкой?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Очередь неограниченная: задачи копятся в памяти, возможен OOM. Внутри LinkedBlockingQueue без ограничения: когда потоки не успевают, задачи копятся бесконечно, ответы приходят всё позже, а память заканчивается.

Варианты ответа

  1. При пике пул создаёт тысячи потоков, и память кончается на стеках
  2. Очередь неограниченная: задачи копятся в памяти, возможен OOMправильный ответ
  3. Пул не переиспользует потоки и создаёт новый на каждую задачу
  4. Задачи выполняются в случайном порядке, и часть из них теряется

Разбор

Внутри LinkedBlockingQueue без ограничения: когда потоки не успевают, задачи копятся бесконечно, ответы приходят всё позже, а память заканчивается. Тысячи потоков это проблема newCachedThreadPool. Потоки fixed-пул переиспользует, задачи не теряет. Решение: явный ThreadPoolExecutor с ограниченной очередью и политикой отказа.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме