Что такое ThreadPoolExecutor в Java и для чего он нужен?

«Что такое ThreadPoolExecutor в Java и для чего он нужен?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

ThreadPoolExecutor — это гибкая и настраиваемая реализация пула потоков в Java, входящая в состав java.util.concurrent. Он управляет жизненным циклом потоков и очередью задач, оптимизируя создание и использование ресурсов.

Ключевые параметры конструктора:

Параметр Назначение
corePoolSize Минимальное количество потоков, которые остаются в пуле, даже если простаивают.
maximumPoolSize Максимальное количество потоков, которое может создать пул.
keepAliveTime Время, которое избыточные (сверх corePoolSize) потоки могут простаивать перед завершением.
workQueue Очередь для хранения задач до их выполнения (напр., LinkedBlockingQueue).
RejectedExecutionHandler Обработчик для задач, которые не могут быть приняты при переполнении очереди и пула.

Пример создания:

ExecutorService executor = new ThreadPoolExecutor(
    2,                              // corePoolSize
    4,                              // maximumPoolSize
    60, TimeUnit.SECONDS,           // keepAliveTime
    new LinkedBlockingQueue<>(10),  // workQueue (емкость 10)
    new ThreadPoolExecutor.CallerRunsPolicy() // Политика "выполнить в потоке-вызывателе"
);

// Использование
executor.submit(() -> System.out.println("Task executed by " + Thread.currentThread().getName()));

Типичные сценарии использования:

  • Обработка HTTP-запросов в веб-сервере.
  • Параллельное выполнение независимых задач (например, обработка файлов).
  • Ограничение потребления ресурсов через контроль максимального числа потоков.