O diagrama abaixo mostra os estados nos quais um thread de Java pode estar e
alguns métodos que podem ser usados para mudar de um estado para outro.
New Thread
class MyThreadClass extends Thread{ ... } ... MyThreadClass myThread = new MyThreadClass();Neste estado, nenhum recurso do sistema foi alocado para o thread ainda, assim, a partir daqui, tudo que você pode fazer é um start(), para ativar o thread, ou um stop(), para "matá-lo". A chamada de qualquer outro método não faz sentido e levantará a exceção IllegalThreadStateException.
Runnable
Thread myThread = new MyThreadClass(); myThread.start();Falamos em "Runnable", ao invés de "Running", porque o thread pode não estar realmente sendo executado. Imagine um computador com um único processador - seria impossível executar todos os threads "Runnable" ao mesmo tempo. O que ocorre é que a CPU deve ser escalonada entre os vários threads.
Not Runnable
O exemplo abaixo coloca o applet myThread para dormir por 10 segundos...
Thread myThread = new MyThreadClass(); myThread.start(); try { myThread.sleep(10000); } catch (InterruptedException e){ }Cada uma destas maneiras tem a sua forma específica de sair do estado "Not Runnable".
Dead
Thread myThread = new MyThreadClass(); myThread.start(); public void run() { int i = 0; while (i < 100) { i++; System.out.println("i = " + i); } }
Thread myThread = new MyThreadClass(); myThread.start(); try { Thread.currentThread().sleep(10000); } catch (InterruptedException e){ } myThread.stop();
O método yield()