java multithreading jvm

Perfiles Java JVM, estado del hilo: ¿qué significa el estado "Monitor"?



multithreading (3)

Yo uso visualVM connect una aplicación Java de hilos múltiples, el hilo tiene el estado 4, es decir, ejecutar, dormir, esperar, monitor. ¿Qué significa este estado de monitoreo? ¿Cuál es la diferencia entre esperar y monitorear?


Eso no es un estado de "monitoreo" ... Indica que el hilo está en el estado Thread.State.BLOCKED . Veo que hay otra buena respuesta, solo te señalaré este enlace para una explicación más profunda


Monitor significará que el hilo está esperando para lograr un bloqueo en un objeto. Por ejemplo, cuando un hilo ejecuta un método sincronizado y otro trata de invocarlo en el mismo objeto, no podrá hacerlo hasta que finalice la primera invocación del método. Esto se debe a que el primer hilo tiene un monitor o bloqueo en ese objeto, por lo que el segundo debe esperar hasta que se libere.

De Oracle Threading Tutorials :

"La sincronización se basa en una entidad interna conocida como bloqueo intrínseco o bloqueo del monitor. (La especificación API a menudo se refiere a esta entidad simplemente como un" monitor "). Los bloqueos intrínsecos desempeñan un papel en ambos aspectos de la sincronización: imponer el acceso exclusivo a un el estado del objeto y el establecimiento de relaciones antes-pasadas que son esenciales para la visibilidad ".


Estos estados son los mismos que se mencionan en la enumeración Thread.State . "Esperar" significa, como dice la documentación:

Un hilo está en estado de espera debido a que llama a uno de los siguientes métodos:

  • Object.wait sin tiempo de espera
  • Thread.unirse sin tiempo de espera
  • LockSupport.park

"Monitor" es el estado BLOCKED , en el cual el hilo está esperando para obtener un bloqueo en un objeto (porque está tratando de ingresar un método o bloque synchronized mientras otro hilo ya tiene el bloqueo asociado).