Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Java: executorservice, threadpoolexecutor

Как контролировать размер очереди задач в ExecutorService?

Вопрос проверяет знание низкоуровневой настройки пулов потоков и их поведения под нагрузкой.

Короткий ответ

Размер очереди контролируется через конкретную реализацию BlockingQueue.
Стандартные фабрики Executors этого не позволяют.
Нужно использовать ThreadPoolExecutor.
Ограниченная очередь предотвращает перегрузку памяти.
Также важно настроить стратегию обработки переполнения.

Длинный ответ

Для точного контроля нужно отказаться от удобных фабрик.

Почему Executors недостаточен

Executors.newFixedThreadPool():

  • использует неограниченную очередь

  • может привести к OOM

Явная настройка пула

ThreadPoolExecutor executor =
    new ThreadPoolExecutor(
        4,
        8,
        30, TimeUnit.SECONDS,
        new ArrayBlockingQueue<>(50)
    );

Здесь контролируются:

  • количество потоков

  • размер очереди

  • поведение при простое

Стратегии отказа

При переполнении очереди применяются:

  • AbortPolicy

  • CallerRunsPolicy

  • DiscardPolicy

  • DiscardOldestPolicy

Выбор стратегии влияет на устойчивость системы.

Мониторинг

Важно:

  • отслеживать размер очереди

  • контролировать время выполнения задач

  • логировать отклонения

Вывод

Полный контроль очереди задач возможен только при использовании ThreadPoolExecutor и ограниченных очередей.

Уровень

  • Рейтинг:

    5

  • Сложность:

    7

Навыки

  • Java

    Java

Ключевые слова

#executorservice

#threadpoolexecutor

Подпишись на Java Developer в телеграм