В Java потоки имеют 5 различных состояний: «Новый», «Выполняемый», «Выполняемый», «Заблокированный» и «Мертвый». Схема преобразования между ними следующая:
На рисунке выше есть исключение. Вызов метода yield() может перевести текущий поток в состояние готовности. Если вы хотите проверить, умер ли поток, вы можете использовать метод isAlive(), который возвращает true, когда поток готов, запущен или заблокирован, и возвращает false, когда он создан или завершается. Не пытайтесь перезапустить мертвый поток, вызвав метод start(). Смерть означает смерть, как и человека, его невозможно восстановить. Кроме того, не вызывайте метод start() дважды в потоке, так как это также вызовет исключение.