Часто задаваемые вопросы на собеседовании - пожалуйста, расскажите о жизненном цикле треда!

Java

Это 7-й день моего участия в Gengwen Challenge.Подробности о мероприятии:Обновить вызов

Это базовый вопрос о трединге, но многие интервьюеры до сих пор его задают.Если этот вопрос застрянет, шансы его пройти сильно уменьшатся.

Давайте посмотрим ниже!

Когда поток создается и запускается, он не сразу выполняет блок кода, есть процесс, то есть жизненный цикл от начала до конца потока.

Вся сеть фактически имеет две версии объяснения жизненного цикла, которые похожи друг на друга.

пять штатов

Один из способов сказать, что это пять состояний, а именно: New, Ready (Runnable), Running (Running), Blocked (Blocked) и Thread Dead (Мертвый).

шесть штатов

Другими словами, существует шесть состояний, а именно: «Новое», «Готово/Выполняется», «Завершено», «Заблокировано», «Ожидание» и «Время_Ожидание».

Примечание. Готовность/работа (Runnable) здесь фактически включает в себя состояние «Выполняется» и состояние «Готово».

Будь то пять или шесть, на самом деле, это наглядно объясняет процесс нити из жизни в смерть, и вопрос, заданный интервьюером, конечно, не так уж и прост.Здесь спрятан более важный момент. способы, которыми эти состояния можно переключать друг на друга, рассмотрим ниже.

Я не буду говорить здесь о пяти состояниях, потому что я обнаружил, что в примечаниях к блок-схеме есть блок-схема с шестью состояниями.Сегодня я сосредоточусь на переключении состояний в шести состояниях.

Сначала фото!

1.png

Объяснение легенды

  1. Поток переключается из состояния New в состояние Runnable с помощью метода Thread.start(), который также является первым шагом в запуске потока.

  2. Из состояния Runnable в состояние Blocked, когда потоку требуется выполнить блок кода для создания блокировки или когда сделан запрос ввода-вывода, поток переключится в состояние блокировки; когда блокировка снята или запрос ввода-вывода завершится, поток переключится из состояния Blocked обратно в состояние Runnable.

  3. Из состояния Runnable в состояние Ожидание необходимо вызвать метод wait() в блоке кода потока, чтобы заставить текущий поток ожидать операции; когда вызывается метод notify() или метод notifyAll(), поток перейдет из состояния ожидания в состояние выполнения.

  4. Из состояния Runnable в состояние Time_Waiting метод sleep() необходимо вызывать в блоке кода потока, поскольку методу сна необходимо передать параметр времени, поэтому после выполнения здесь текущий поток будет ожидать в течение определенного периода времени. ; только время ожидания превышает время, поток переключится из состояния Time_Waiting обратно в состояние Runnable.

  5. Из состояния Runnable в состояние Terminated лучше всего понимать, что после завершения выполнения кода он переключится в это состояние, что также указывает на кончину потока, и как только поток будет выполнен, он будет восстановлен пул потоков или непосредственно уничтожить.

О знании пула потоков вы можете подробно поговорить позже.На сегодня это все.Хотя знания в этот раз базовые,но одинаково важные.Он незаменим как для собеседований,так и для повседневной работы.Надеюсь все смогут вырасти вместе и заложить прочный фундамент.