Выбор ответа Junior Потоки и Java Memory Model обновлено

Исключение в потоке

Вопрос

В потоке, запущенном из main, вылетело необработанное RuntimeException. Что будет с main?

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

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

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

Коротко

Правильный ответ: Main продолжит работу, умрёт только этот поток. Необработанное исключение завершает только свой поток: стектрейс печатает UncaughtExceptionHandler по умолчанию, остальные потоки работают дальше.

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

  1. Main продолжит работу, умрёт только этот потокправильный ответ
  2. Main тоже завершится с этим исключением
  3. Исключение будет проброшено в main при следующем вызове любого метода
  4. JVM завершится целиком

Разбор

Необработанное исключение завершает только свой поток: стектрейс печатает UncaughtExceptionHandler по умолчанию, остальные потоки работают дальше. В main оно не передаётся (в отличие от Future.get, который завернёт его в ExecutionException). JVM завершается, когда закончились все не-daemon потоки.

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

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

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