PCO 5 Gerenciamento E Sincronizacao 1
Threads Java como um
Estudo de Caso
Estados de uma Thread Java
• O diagrama seguinte mostra os estados nos quais uma thread Java pode estar e alguns métodos que podem ser usados para mudar de um estado para outro.
Ciclo de Vida de Java Threads
NEW
TIMEWAITING
READY
FINISHED
WAITING
RUNNING
BLOCKED
DEAD
Nova Thread - NEW
• Inicialização da thread –
• Feita através do construtor Thread(). class MyThreadClass extends Thread{ ...
}
...
MyThreadClass myThread = new MyThreadClass();
NEW RUNNABLE (Executável)
• Neste estado de NEW (Nova), nenhum recurso do sistema foi alocado para a thread, ainda.
• Assim, a partir daqui, tudo que você pode fazer é um start()para ativar a thread, e a thread passa a um estado RUNNANLE (estado Ready), ou um stop(), para "matá-lo".
• A chamada de qualquer outro método não faz sentido e levantará a exceção
IllegalThreadStateException.
Estado de RUNNABLE (Pronto)
• Quando uma thread entra pela primeira vez no estado RUNNABLE a partir do estado “NEW”, ela vai para o estado de “Ready”, que a JVM não vê.
• Este é o estado em que o thread está pronta para rodar, mas não tem os recursos do SO para ser executada.
• O método start()requisita os recursos do SO, necessários para rodar a thread e chama o seu método run().
• O método run() é a "alma" de uma thread. É neste método que definimos o que o thread vai executar.
• Thread myThread = new MyThreadClass(); myThread.start(); Estado Ready
• Falamos em “Ready“ (Pronto), porque a thread pode não estar realmente sendo executada no estado de Ready
(Pronto).
• Imagine um computador com um único processador - seria impossível executar todos as threads “prontas" ao mesmo tempo. • O que ocorre é que o processador deve ser escalonada entre as vários threads.
Estado Running (Executando)
• Quando o Scheduler escalona uma thread para o processador, esta passa ao estado de
“Running”.
• Quando uma thread está em “Running”
(Executando), as instruções do seu método