Ejemplo de Java - obtener el estado del hilo
En el ciclo de vida de los hilos de Java, la clase Thread tiene un tipo enumerado State que define varios estados del hilo, que son:
- New
- Runnable
- Blocked
- Waiting
- Timed Waiting
- Terminated
Descripción de cada estado:
1. Estado inicial - NEW
Declaración:
public static final Thread.State NEW
Implementar la interfaz Runnable y heredar de Thread permite obtener una clase de hilo. Al crear una instancia con new, el hilo entra en el estado inicial.
2. RUNNABLE
Declaración:
public static final Thread.State RUNNABLE
2.1. Estado listo
El estado listo solo significa que tienes derecho a ejecutarte; si el planificador no te selecciona, permanecerás siempre en estado listo.
Al llamar al método start() del hilo, este hilo entra en estado listo.
Cuando el método sleep() del hilo actual termina, el join() de otro hilo termina, la espera de entrada del usuario finaliza, o un hilo obtiene el bloqueo del objeto, estos hilos también entrarán en estado listo.
Cuando se agota el quantum de tiempo del hilo actual o se llama al método yield() del hilo actual, el hilo actual entra en estado listo.
Cuando un hilo en el grupo de bloqueos obtiene el bloqueo del objeto, entra en estado listo.
2.2. Estado en ejecución
Es el estado en el que se encuentra un hilo cuando el planificador de hilos lo selecciona de la piscina ejecutable como hilo actual. Esta es también la única forma en que un hilo entra en estado de ejecución.
3. Estado bloqueado - BLOCKED
Declaración:
public static final Thread.State BLOCKED
El estado bloqueado es el estado en el que el hilo se bloquea al entrar en un método o bloque de código modificado por la palabra clave synchronized (al obtener el bloqueo).
4. En espera - WAITING
Declaración:
public static final Thread.State WAITING
Los hilos en este estado no reciben tiempo de ejecución de CPU; deben esperar a ser despertados explícitamente; de lo contrario, permanecerán en espera indefinida.
5. Espera con tiempo límite - TIMED_WAITING
Declaración:
public static final Thread.State TIMED_WAITING
Los hilos en este estado no reciben tiempo de ejecución de CPU, pero no necesitan esperar indefinidamente a ser despertados explícitamente por otros hilos; se despiertan automáticamente después de un cierto tiempo.
6. Estado terminado - TERMINATED
Declaración:
public static final Thread.State TERMINATED
Cuando el método run() del hilo se completa, o cuando el método main() del hilo principal se completa, consideramos que ha terminado. El objeto hilo puede estar vivo, pero ya no es un hilo que se ejecuta de forma independiente. Una vez que un hilo termina, no puede revivir.
Llamar al método start() en un hilo terminado lanzará la excepción java.lang.IllegalThreadStateException.
El siguiente ejemplo demuestra cómo obtener el estado de un hilo:
Archivo Main.java
La salida del código anterior es:
State of thread1 after creating it - NEW State of thread1 after calling .start() method on it - RUNNABLE State of thread2 after creating it - NEW State of thread2 after calling .start() method on it - RUNNABLE State of thread2 after calling .sleep() method on it - TIMED_WAITING State of thread1 while it called join() method on thread2 -WAITING State of thread2 when it has finished it's execution - TERMINATEDOtras extensiones
Ejemplo de Java