Выбор ответа Junior Потоки и Java Memory Model спрашивают часто обновлено

start и run

Вопрос

Что произойдёт при вызове thread.run() вместо thread.start()?

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

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

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

Коротко

Правильный ответ: Код выполнится синхронно в текущем потоке, нового потока не будет. run() это обычный метод: вызов выполняет его в текущем потоке.

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

  1. Код выполнится синхронно в текущем потоке, нового потока не будетправильный ответ
  2. Создастся новый поток, как и при start(), но без имени и приоритета
  3. Будет IllegalThreadStateException, потому что поток ещё не запущен
  4. Код не выполнится вообще: run() без start() ничего не делает

Разбор

run() это обычный метод: вызов выполняет его в текущем потоке. Новый поток запускает только start(), который затем сам вызывает run() в новом потоке. Исключение IllegalThreadStateException бросает повторный start().

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

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

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