Вопрос проверяет знание низкоуровневой настройки пулов потоков и их поведения под нагрузкой.
Размер очереди контролируется через конкретную реализацию BlockingQueue.
Стандартные фабрики Executors этого не позволяют.
Нужно использовать ThreadPoolExecutor.
Ограниченная очередь предотвращает перегрузку памяти.
Также важно настроить стратегию обработки переполнения.
Для точного контроля нужно отказаться от удобных фабрик.
Executors недостаточенExecutors.newFixedThreadPool():
использует неограниченную очередь
может привести к OOM
ThreadPoolExecutor executor =
new ThreadPoolExecutor(
4,
8,
30, TimeUnit.SECONDS,
new ArrayBlockingQueue<>(50)
);
Здесь контролируются:
количество потоков
размер очереди
поведение при простое
При переполнении очереди применяются:
AbortPolicy
CallerRunsPolicy
DiscardPolicy
DiscardOldestPolicy
Выбор стратегии влияет на устойчивость системы.
Важно:
отслеживать размер очереди
контролировать время выполнения задач
логировать отклонения
Полный контроль очереди задач возможен только при использовании ThreadPoolExecutor и ограниченных очередей.