logo

Ciclo de vida y estados de un hilo en Java

A hilo en Java puede existir en cualquiera de los siguientes estados en cualquier momento dado. Un hilo se encuentra sólo en uno de los estados mostrados en cualquier instante:

  1. Nuevo Estado
  2. Estado ejecutable
  3. Estado bloqueado
  4. Estado de espera
  5. Estado de espera cronometrado
  6. Estado terminado

El siguiente diagrama representa varios estados de un hilo en cualquier instante:

Ciclo de vida y estados de un subproceso en Java' title=




Ciclo de vida de un hilo 

Hay varios estados del hilo en un ciclo de vida como se menciona a continuación:

  1. Nuevo hilo: Cuando se crea un nuevo hilo está en el nuevo estado . El subproceso aún no ha comenzado a ejecutarse cuando se encuentra en este estado. Cuando un hilo se encuentra en el nuevo estado, su código aún no se ha ejecutado y no ha comenzado a ejecutarse.
  2. Estado ejecutable : Un hilo que es listo para correr se mueve a un estado ejecutable. En este estado, es posible que un hilo se esté ejecutando o que esté listo para ejecutarse en cualquier instante. Es responsabilidad del programador de subprocesos darle tiempo al subproceso para que se ejecute. Un programa multiproceso asigna una cantidad fija de tiempo a cada hilo individual. Todos y cada uno de los subprocesos tienen una pequeña cantidad de tiempo para ejecutarse. Después de ejecutarse por un tiempo, un subproceso se detiene y cede la CPU para que puedan ejecutarse otros subprocesos.
  3. Obstruido: El hilo estará en estado bloqueado. cuando intenta adquirir un candado pero actualmente el bloqueo lo adquiere el otro hilo. El hilo pasará del estado bloqueado al estado ejecutable cuando adquiera el bloqueo.
  4. estado de espera : El hilo estará en estado de espera. cuando llama esperar() método o unirse() método. Pasará al estado ejecutable cuando otro subproceso lo notifique o ese subproceso finalice.
  5. Espera cronometrada : Un hilo se encuentra en un estado de espera temporizada cuando llama a un método con un parámetro de tiempo de espera . Un hilo permanece en este estado hasta que se completa el tiempo de espera o hasta que se recibe una notificación. Por ejemplo, cuando un hilo llama a suspensión o espera condicional, se mueve a un estado de espera temporizada.
  6. Estado terminado: Un hilo termina por cualquiera de los siguientes motivos: 
    • Porque sale normalmente. Esto sucede cuando el programa ha ejecutado completamente el código del hilo.
    • Porque ocurrió algún evento erróneo inusual como una falla de segmentación o una excepción no controlada.

Estados de subprocesos en Java

En Java para obtener el estado actual del uso del hilo. Hilo.getState() método para obtener el estado actual del hilo. Java proporciona java.lang.Thread.Estado enumeración que define las constantes ENUM para el estado de un hilo, cuyo resumen se proporciona a continuación: 

1. nuevo 

Estado del hilo para un hilo que aún no ha comenzado. 

diferencia entre un gigabyte y un megabyte

Thread.State final estático público NUEVO

2. Ejecutable 

Estado del subproceso para un subproceso ejecutable. Un subproceso en estado ejecutable se está ejecutando en la máquina virtual Java, pero puede estar esperando otros recursos del sistema operativo, como un procesador. 

puerto de escucha

Thread.State final estático público RUNNABLE

3. Bloqueado 

Estado del subproceso bloqueado en espera de un bloqueo del monitor. Un subproceso en estado bloqueado está esperando que un bloqueo del monitor ingrese a un bloque/método sincronizado o vuelva a ingresar a un bloque/método sincronizado después de llamar Objeto.esperar(). 

Thread.State final estático público BLOQUEADO

4. Esperando 

 Estado del hilo para un hilo en espera. Un subproceso está en estado de espera debido a que se llama a uno de los siguientes métodos: 

  • Object.wait sin tiempo de espera
  • Hilo.unirse sin tiempo de espera
  • LockSupport.parque

Thread.State final estático público EN ESPERA

5. Espera cronometrada 

Estado del subproceso para un subproceso en espera con un tiempo de espera especificado. Un subproceso está en estado de espera cronometrada debido a que llama a uno de los siguientes métodos con un tiempo de espera positivo especificado: 

  • Hilo.dormir
  • Objeto.esperar con tiempo de espera
  • Thread.join con tiempo de espera
  • LockSupport.parkNanos
  • LockSupport.parkHasta

Thread.State final estático público TIMED_WAITING

6. Terminado 

Estado del hilo para un hilo terminado. El hilo ha completado su ejecución. 

Thread.State final estático público TERMINADO


Ejemplo de demostración de estados de subprocesos

A continuación se muestra un ejemplo del mundo real de un sistema de reserva de boletos que muestra diferentes estados de subprocesos:

Ejemplo:

Java
// Java program to demonstrate thread states  // using a ticket booking scenario class TicketBooking implements Runnable {  @Override  public void run() {    try {    // Timed waiting  Thread.sleep(200);   } catch (InterruptedException e) {  e.printStackTrace();  }  System.out.println('State of bookingThread while mainThread is waiting: ' +  TicketSystem.mainThread.getState());  try {    // Another timed waiting  Thread.sleep(100);   } catch (InterruptedException e) {  e.printStackTrace();  }  } } public class TicketSystem implements Runnable {  public static Thread mainThread;  public static TicketSystem ticketSystem;  @Override  public void run() {  TicketBooking booking = new TicketBooking();  Thread bookingThread = new Thread(booking);  System.out.println('State after creating bookingThread: ' + bookingThread.getState());  bookingThread.start();  System.out.println('State after starting bookingThread: ' + bookingThread.getState());  try {  Thread.sleep(100);  } catch (InterruptedException e) {  e.printStackTrace();  }  System.out.println('State after sleeping bookingThread: ' + bookingThread.getState());  try {    // Moves mainThread to waiting state  bookingThread.join();   } catch (InterruptedException e) {  e.printStackTrace();  }  System.out.println('State after bookingThread finishes: ' + bookingThread.getState());  }  public static void main(String[] args) {  ticketSystem = new TicketSystem();  mainThread = new Thread(ticketSystem);  System.out.println('State after creating mainThread: ' + mainThread.getState());  mainThread.start();  System.out.println('State after starting mainThread: ' + mainThread.getState());  } } 


misión imposible todas las películas

Producción:

Producción' loading='lazy' title=


Explicación:

  • Cuando se crea un nuevo hilo, el hilo está en el estado NUEVO. Cuando se llama al método start() en un subproceso, el programador de subprocesos lo mueve al estado Ejecutable.
  • Siempre que se llama al método join() en una instancia de subproceso, el subproceso principal pasa a Esperar a que se complete el subproceso de reserva.
  • Una vez que el método de ejecución del hilo se completa, su estado pasa a ser Terminado.
Crear cuestionario