Encontré un diagrama muy agradable que describe bastante bien todo lo que necesitas / quieres saber.
- 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 ().
- Runnable
El hilo está en estado ejecutable después de la invocación del método start (), pero el programador del hilo no lo ha seleccionado para que sea el hilo en ejecución.
- Corriendo
El subproceso está en estado de ejecución si el planificador de subprocesos lo ha seleccionado.
- Espera cronometrada
La espera temporizada es un estado de subproceso para un subproceso en espera con un tiempo de espera especificado. Un hilo se encuentra en el estado de espera temporizado debido a que se llama a uno de los siguientes métodos con un tiempo de espera positivo especificado:
- Thread.sleep (tiempo de sueño)
- Object.wait (tiempo de espera)
- Thread.join (tiempo de espera)
- LockSupport.parkNanos (tiempo de espera)
- LockSupport.parkUntil (tiempo de espera)
- No ejecutable (bloqueado)
Este es el estado en el que el hilo aún está activo, pero actualmente no es elegible para ejecutarse.
- Terminado
Un hilo está en estado terminado o inactivo cuando su método run () sale.
Espero que esto responda a tu pregunta :).
Estacionamiento:
Desactiva el hilo actual para fines de programación de hilos a menos que el permiso esté disponible.
Los subprocesos se están estacionando o suspendiendo si desea llamarlo de esta manera porque no tiene permiso para ejecutarse. Una vez que se concede el permiso, el hilo se desempacará 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).
VisualVM mapea el estado del hilo de Java (como se describe en la respuesta de @ Maciej) al estado presentado en su interfaz de usuario de la siguiente manera:
Sleeping
yPark
son casos específicos de espera (cronometrada):(El mapeo se realiza en
ThreadMXBeanDataManager.java
.)Aquí se puede encontrar una breve (y no autorizada) discusión sobre el estado del hilo de Java .
EDITADO PARA AÑADIR:
También vale la pena señalar que los subprocesos que bloquean las llamadas a métodos nativos aparecen en la JVM como
RUNNABLE
y, por lo tanto, VisualVM los informa comoRunning
(y consumen el 100% de la CPU).fuente