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

Порядок действий ThreadPoolExecutor

Вопрос

В ThreadPoolExecutor core = 2, max = 4, очередь ArrayBlockingQueue(10). Сейчас работают 2 потока, в очереди 5 задач. Что произойдёт с новой задачей?

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

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

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

Коротко

Правильный ответ: Попадёт в очередь: потоки сверх core создаются, лишь когда она полна. Логика execute: меньше core потоков, создать поток; иначе в очередь; если очередь полна, создать поток до max; иначе политика отказа.

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

  1. Попадёт в очередь: потоки сверх core создаются, лишь когда она полнаправильный ответ
  2. Создастся третий поток, потому что max = 4 и пул сначала растёт до max
  3. Задача будет отклонена политикой AbortPolicy, раз core-потоки заняты
  4. Выполнится в вызывающем потоке, пока в пуле нет свободных потоков

Разбор

Логика execute: меньше core потоков, создать поток; иначе в очередь; если очередь полна, создать поток до max; иначе политика отказа. Очередь заполнена на 5 из 10, поэтому задача просто встаёт в очередь. Многие ожидают, что пул сначала дорастёт до max, это частое заблуждение. Выполнение в вызывающем потоке это CallerRunsPolicy, она срабатывает только при отказе.

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

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

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