Выбор ответа Junior java.util.concurrent и виртуальные потоки обновлено

Исключение в submit

Вопрос

Задача, отправленная через executor.submit(...), бросила исключение. Где его увидит программист?

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

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

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

Коротко

Правильный ответ: При вызове future.get() в виде ExecutionException. submit заворачивает задачу в FutureTask, исключение сохраняется в Future и выбрасывается из get() как ExecutionException с причиной.

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

  1. В консоли сразу, как у обычного потока со стектрейсом
  2. Нигде: исключение теряется навсегда, даже если вызвать get
  3. При вызове future.get() в виде ExecutionExceptionправильный ответ
  4. Оно остановит весь пул, и остальные задачи отменятся

Разбор

submit заворачивает задачу в FutureTask, исключение сохраняется в Future и выбрасывается из get() как ExecutionException с причиной. Если get не вызвать, ошибку никто не увидит, это частая причина «тихих» сбоев. execute ведёт себя иначе: исключение уходит в UncaughtExceptionHandler потока. Пул продолжает работать.

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

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

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