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

Как настроить пул потоков

Вопрос

Как вы выбираете и настраиваете пул потоков для сервиса?

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

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

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

Коротко

Создаю ThreadPoolExecutor явно, а не через фабрики Executors, потому что fixed-пул имеет неограниченную очередь, а cached-пул неограниченное число потоков. Помню порядок: сначала core-потоки, потом очередь, потом рост до max, потом политика отказа.

Что должно прозвучать в ответе

  • Параметры ThreadPoolExecutor и порядок core, очередь, max, отказ

  • Ограниченная очередь и политика отказа вместо фабрик Executors

  • Размер пула: CPU-задачи около числа ядер, I/O больше

  • Отдельные пулы для разных видов работы (bulkhead)

  • Имена потоков, метрики, graceful shutdown

  • Виртуальные потоки как альтернатива для I/O

Что могут спросить следом

  • Что будет, если задача внутри пула ждёт другую задачу этого же пула?
  • Какую политику отказа выберете и почему?

Разбор

Создаю ThreadPoolExecutor явно, а не через фабрики Executors, потому что fixed-пул имеет неограниченную очередь, а cached-пул неограниченное число потоков. Помню порядок: сначала core-потоки, потом очередь, потом рост до max, потом политика отказа. Очередь ограничиваю, политику выбираю осознанно: отклонить и отдать 503, или CallerRunsPolicy, чтобы притормозить источник. Размер для вычислений около числа ядер, для I/O больше, оцениваю по доле ожидания и проверяю нагрузкой. Разные виды работы развожу по разным пулам, чтобы медленный внешний сервис не съел все потоки. Даю потокам имена, вывожу метрики очереди и активных потоков, при остановке делаю shutdown и awaitTermination. На Java 21 для чисто I/O-задач часто проще взять виртуальные потоки, а ограничение параллелизма выразить семафором. Ещё одна ловушка: задача, которая ждёт другую задачу того же пула, может его заблокировать.

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

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

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