Alguém por favor pode me explicar a diferença entre Sleeping
, Wait
, Park
, e Monitor
estados de rosca em VisualVM.
Isto é o que encontrei:
Running
: thread ainda está em execução.
Sleeping
: thread está dormindo (método yield () foi chamado no objeto thread)
Wait
: thread foi bloqueado por um mutex ou uma barreira e está esperando por outro thread para liberar o bloqueio
Park
: threads estacionados são suspensos até que recebam uma permissão. O desbloqueio de um thread geralmente é feito chamando o método unpark () no objeto do thread
Monitor
: os threads estão esperando que uma condição se torne verdadeira para retomar a execução
O que eu não consigo entender é o parque estadual, o que realmente suspende o fio? Como posso detectar no código o que fez o thread suspender sua execução?
Alguém pode me orientar a esse respeito.
Obrigado.
VisualVM mapeia o estado do thread Java (conforme descrito na resposta de @Maciej) para o estado apresentado em sua IU da seguinte maneira:
Sleeping
ePark
são casos específicos de espera (cronometrada):(O mapeamento é executado em
ThreadMXBeanDataManager.java
.)Uma breve (e não oficial) discussão sobre o estado do thread Java pode ser encontrada aqui .
EDITADO PARA ADICIONAR:
Também é importante notar que os threads que bloqueiam as chamadas para métodos nativos aparecem na JVM como
RUNNABLE
e, portanto, são relatados pelo VisualVM comoRunning
(e consomem 100% da CPU).fonte