Eu estava pesquisando sobre as transições de estado da Thread e achei algo que me deixou em dúvida.
Em alguns lugares dizem que a thread pode ir para BLOCKED por espera de recursos de IO e em outros (como na documentação do Java) dizem que a thread passa de WAITING para BLOCKED quando ela for notificada (somente).
Quando a thread aguarda por recurso ela fica em waiting mesmo… só depois de ser atendido o recurso ela volta para a fila para competir pela CPU.
O estado blocked ele é alcançado pelas threads que estão aguardando um recurso sincronizado e que esteja sendo utilizado por outra thread
abraço
RichardVaugh
Certo, mas a pergunta, resumindo é essa:
Só consigo chegar em BLOCKED assim ?
RUNNABLE -> WAITING -> BLOCKED
ou assim também ?
RUNNABLE -> BLOCKED
ViniGodoy
A documentação do Java é bem clara. Ela diz o seguinte:
BLOCKED: Ocorre quando uma thread tenta entrar num bloco sincronizado e não consegue. Nesse caso, ela fica bloqueada, aguardando que outra thread saia do bloco. Não houve chamada explícita aos métodos join() ou wait() aqui.
WAITING: Ocorre quando uma thread espera por outra. Seja chamando wait() ou join()
Quando um aplicativo faz I/O, a thread que requisitou entra em Waiting state, pois esperará a thread que faz a leitura do disco em si terminar.
ViniGodoy
Consegue. E é o caso normal.
A thread tenta entrar num bloco sincronizado, mas ele está em uso. Sai direto de RUNNABLE e fica BLOCKED, até que o bloco libere.