GABARITO: C
O estado Non-Runnable
Um thread passa a ser "Non-Runnable" quando um dos seguintes eventos ocorre:
O método sleep() é chamado. O thread chama o método wait() que espera por uma condição. Veremos isso à frente
O thread faz um system call "lento" tal como um system call que causa I/O. Também fala-se que o thread está "bloqueado" esperando algo. Neste caso, clockThread passa a ser Non-Runnable quando run() chama sleep()
public void run() {
Thread myThread = Thread.currentThread();
while (clockThread == myThread) {
repaint();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// The VM doesn't want us to sleep anymore,
// so get back to work
}
}
}
Quando o thread está dormindo, ele não roda, mesmo que a CPU esteja livre
Depois de 1 segundo (1000 milissegundos), o thread para para Runnable novamente e vai rodar quando "receber" a CPU
Para cada forma de entrar no estado Non-Runnable, alguma forma específica fará o thread retornar para o estado Runnable
Ex.: para retornar de sleep, tempo tem que passar
Ex.: para retornar de wait, outro objeto vai ter que fazer a condição ocorrer através de uma chamada a notify()
Ex.: para retornar de I/O lento, o I/O tem que terminar
Fé na missão!
Fonte: http://www.dsc.ufcg.edu.br/~jacques/cursos/map/html/threads/ciclo.html