visual jdk intellij java jvm visualvm jvisualvm

java - intellij - visualvm jdk 10



VisualVM-Estados de subprocesos (2)

He usado google y la primera página que apareció tenía un diagrama muy agradable que describe casi todo lo que necesitas / quieres saber. La próxima vez vale la pena probar google para este tipo de preguntas.

1) nuevo

El hilo está en un nuevo estado si crea una instancia de la clase Thread pero antes de la invocación del método start ().

2) Runnable

El subproceso está en estado ejecutable después de invocar el método start (), pero el planificador de subprocesos no lo ha seleccionado para que sea el subproceso en ejecución.

3) corriendo

El subproceso está en estado de ejecución si el planificador de subprocesos lo ha seleccionado.

4) tiempo de espera

La espera temporizada es un estado de subproceso para un subproceso que espera con un tiempo de espera especificado. Un subproceso está en el estado de espera cronometrado debido a llamar a uno de los siguientes métodos con un tiempo de espera positivo especificado:

  • Thread.sleep (sueño)
  • Object.wait (tiempo de espera)
  • Thread.join (tiempo de espera)
  • LockSupport.parkNanos (tiempo de espera)
  • LockSupport.parkUntil (tiempo de espera)

5) No ejecutable (bloqueado)

Este es el estado cuando el hilo aún está vivo, pero actualmente no es elegible para ejecutarse.

6) Terminado

Un subproceso está en estado terminado o inactivo cuando sale su método run ().

Esperemos que esto responda tu pregunta :).

Estacionamiento:

Inhabilita el subproceso actual para fines de programación de subprocesos a menos que el permiso esté disponible.

Los subprocesos se estacionan o suspenden si desea llamarlo de esta manera porque no tiene permiso para ejecutar. Una vez que se otorga el permiso, el subproceso quedará sin estacionar y se ejecutará.

Los permisos de LockSupport están asociados con subprocesos (es decir, el permiso se otorga a un subproceso en particular) y no se acumula (es decir, solo puede haber un permiso por subproceso, cuando el subproceso consume el permiso, desaparece).

¿Puede alguien explicarme la diferencia entre los estados de subproceso Sleeping , Wait , Aparcar y Monitor en VisualVM.

Esto es lo que he encontrado:

Running : el hilo aún se está ejecutando.
Sleeping : el hilo está en reposo (se llamó al método yield () en el objeto de hilo)
Wait : el hilo fue bloqueado por un mutex o una barrera, y está esperando que otro hilo libere el bloqueo
Estacionamiento: los hilos estacionados se suspenden hasta que se les otorga un permiso. El desempaquetado de un subproceso generalmente se realiza llamando al método unpark () en el objeto de subproceso
Monitor : los subprocesos esperan que se cumpla una condición para reanudar la ejecución

Lo que no puedo entender es el parque estatal, ¿qué es lo que realmente suspende el hilo? ¿Cómo detecto en el código qué ha hecho que el hilo suspenda su ejecución?

¿Puede alguien guiarme en este sentido?

Gracias.


VisualVM asigna el estado del subproceso Java (como se describe en la respuesta de @ Maciej) al estado presentado en su interfaz de usuario de la siguiente manera:

BLOCKED -> Monitor RUNNABLE -> Running WAITING/TIMED_WAITING -> Sleeping/Park/Wait (see below) TERMINATED/NEW -> Zombie

Sleeping y Park son casos específicos de espera (cronometrada):

Sleeping: specifically waiting in Thread.sleep(). Park: specifically waiting in sun.misc.Unsafe.park() (presumably via LockSupport).

(La asignación se realiza en ThreadMXBeanDataManager.java ).

here se puede encontrar una breve (y no autorizada) discusión sobre el estado del hilo de Java.

EDITADO PARA AGREGAR:

También vale la pena señalar que el bloqueo de subprocesos en las llamadas a métodos nativos aparece en la JVM como RUNNABLE y, por lo tanto, RUNNABLE informa que se está Running (y que consume un 100% de CPU).