Em Java, os threads têm 5 estados diferentes: Novo, Executável, Em Execução, Bloqueado e Morto. O diagrama de conversão entre eles é o seguinte:
Há uma exceção na figura acima. Chamar o método yield() pode transferir o thread atualmente em execução para o estado pronto. Se você quiser testar se um thread morreu, você pode usar o método isAlive(), que retorna verdadeiro quando o thread está pronto, em execução ou bloqueado e retorna falso quando ele é criado ou morre. Não tente reiniciar um thread morto chamando o método start(). Morte significa morte, assim como os seres humanos, é impossível regenerar. Além disso, não chame o método start() duas vezes em um thread, pois isso também causará uma exceção.