Perfiles de Java JVM, estado de subprocesos: ¿qué significa el estado "Monitor"?

81

ingrese la descripción de la imagen aquí

Utilizo visualVM para conectar una aplicación Java de múltiples subprocesos, el subproceso tiene 4 estados, es decir, en ejecución, en suspensión, en espera, en el Monitor. ¿Qué significa este estado de supervisión? ¿Cuál es la diferencia entre esperar y monitorizar?

user84592
fuente

Respuestas:

89

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

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

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

"Monitor" es el BLOCKEDestado en el que el hilo está esperando obtener un bloqueo en un objeto (porque está intentando ingresar a un synchronizedbloque o método mientras otro hilo ya tiene el bloqueo asociado).

Jesper
fuente
24
Puede ser útil para cualquier persona nueva en el tema (como el OP) saber que "monitor" se usa como sinónimo de "bloqueo" aquí y en la documentación.
Matt b
6
¿Hay alguna forma de saber qué objeto sincronizado (o línea de código) es el que está causando que el hilo sea BLOQUEADO / Monitor?
user123321
3
@ user123321 Puede hacer un volcado de hilo. (Botón en la esquina superior derecha de la pestaña "hilos"). Allí puede ver con qué está intentando sincronizar el hilo y qué hilo mantiene el bloqueo.
Fildor
¿Y cuál es la diferencia entre sleepingy se waitingmuestra en la captura de pantalla?
Muhammad Gelbana
7

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

Grooveek
fuente
5

Monitor significará que el hilo está esperando alcanzar un bloqueo en un objeto. Por ejemplo, cuando un hilo está ejecutando un método sincronizado y otro intenta 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 los tutoriales de Oracle Threading :

"La sincronización se basa en una entidad interna conocida como bloqueo intrínseco o bloqueo de monitor. (La especificación de la 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 de sucesos anteriores que son esenciales para la visibilidad ".

mogronalol
fuente