Introducción al ciclo de vida de subprocesos en Java

Un hilo experimenta numerosas fases en el ciclo de vida. Por ejemplo, un hilo llega al mundo, comienza, corre y luego desaparece. El siguiente diagrama explica el ciclo de vida completo del hilo.

  • Thread Constructor produce un hilo a través de un nuevo estado.
  • Llamar a comenzar el método en Thread puede pasar por el estado ejecutable.
  • El Programador de subprocesos con respecto a Java ejecuta ese subproceso cuando recibe el procesador.
  • Cuando el subproceso iría a un estado bloqueado, se ejecutará una vez más porque vuelve a un estado ejecutable.
  • Si se hace referencia al método de espera como subproceso, pasará a esperar el estado, pasará al estado ejecutable poco después de que se convierta en notificación en todo el Informe, así como en un método de notificación a todos.
  • El subproceso finaliza una vez que finaliza el método de ejecución.

¿Qué es el hilo?

Un subproceso se define a nivel del sistema operativo. Y el lenguaje Java, así como todos los demás lenguajes, utiliza, aprovecha, el servicio que brinda el sistema operativo. Desde el punto de vista del desarrollador, un hilo es un conjunto de instrucciones que vamos a escribir en nuestra aplicación y ejecutar de cierta manera. Una aplicación en sí misma puede estar compuesta de varios hilos. Se pueden ejecutar diferentes hilos al mismo tiempo. La JVM (Java Virtual Machine) funciona con varios hilos. Hay hilos para la recolección de basura. Hay hilos para el compilador Just in Time y otros hilos técnicos.

Estados del ciclo de vida del hilo en Java

A continuación se muestran los diferentes estados del ciclo de vida del hilo en Java:

1. Nuevo: un nuevo hilo comienza su ciclo de vida dentro del nuevo estado. Continúa con este estado antes de que el programa comience el hilo. Además, se conoce como un hilo creado.

2. Ejecutable: después de que un subproceso recién nacido puede comenzar, el subproceso se convierte en ejecutable. Se considera que un hilo con este estado realiza su proceso.

3. Esperando: Ocasionalmente, una secuencia de subprocesos hacia la espera alrededor del estado a pesar de que el subproceso está esperando que otro subproceso ejecute una actividad. Un subproceso cambia al estado ejecutable solo si un subproceso adicional indica el subproceso en espera para seguir funcionando.

4. Espera programada: un subproceso ejecutable puede enlazar fácilmente la espera programada particular para que el estado obtenga un intervalo específico de tiempo. Un subproceso con este estado hace que las transiciones vuelvan al estado ejecutable una vez que expire ese intervalo de puntos o si ocurre el evento que realmente está esperando.

5. Terminado: un subproceso ejecutable pasa al estado terminado porque cumple su tarea o termina.

¿Cómo crear un hilo en Java?

La forma más básica de crear un hilo en Java es usar el Patrón Runnable. Primero debe crear una instancia de la interfaz Runnable, que es muy fácil; solo hay un método para implementar. Luego pasamos esta instancia al constructor de la clase Thread. Y luego simplemente llamamos al método start () de este objeto de hilo creado, para lanzar un nuevo hilo que va a ejecutar la tarea envuelta en nuestro objeto Runnable.

Entonces, primero creamos una instancia de Runnable. Solo hay un método para implementar, que se llama método run (). Este es el patrón de Java 7 para hacer eso, con una instancia de una clase anónima. Pero también podemos usar una expresión lambda para implementar un Runnable ya que solo hay un método en la interfaz Runnable.

Permítanos crear hilos en ejemplos muy simples.

Vamos a ver qué puede salir mal con una condición de carrera con código no sincronizado que debe sincronizarse y vamos a arreglar nuestro código usando la sincronización. Este primer ejemplo es muy simple, es muy básico. Se trata solo de crear una tarea.

Salida:

Una tarea es una instancia de la interfaz Runnable, llamémosla ejecutable, y podemos implementar esta interfaz usando una expresión lambda. Esta tarea se asigna a un nuevo hilo y se ejecuta en el contexto de este hilo. Así que solo vamos a imprimir el nombre del hilo que ejecuta esta tarea. Estoy corriendo en … Thread.currentThread () es un método estático de la clase Thread que devuelve el hilo que ejecuta la tarea actual. Y solo tenemos que llamar a getName () en este objeto de subproceso para devolver el nombre de un subproceso. Luego, después de crear una instancia de subproceso t = nuevo subproceso. Pasando este ejecutable como parámetro. Entonces este hilo va a ejecutar este fragmento de código. Y para lanzarlo. t.start () este es el método start () al que debemos llamar. Lo que también podemos hacer es dar un nombre explícito de este hilo usando t.setName ("Mi hilo"). Y ahora podemos ejecutar este código. Ahora, en lugar del método call start (), llamamos al método run (), y si ejecutamos este código, el problema es que la tarea se ejecuta correctamente, pero no se ejecuta en el hilo que hemos creado. Se ejecuta en el hilo principal, que es el hilo que ejecuta el método principal. Por lo tanto, este método run () no debería llamarse si queremos lanzar un nuevo hilo.

Salida:

Métodos del ciclo de vida del hilo en Java

Los métodos descritos por simplemente Thread se presentan en la Tabla.

Tipos de datosNombres de métodos de subprocesos
Cuerda

getName ()

Devuelve el nombre de este hilo

En tobtener prioridad ()

Devuelve la prioridad del hilo

booleanoisAlive ()

Comprueba si este hilo todavía se está ejecutando

vacíounirse()

Espera a que este hilo muera (finalice)

vacíocorrer()

Cada vez que este subproceso se creó utilizando un objeto Runnable individual, se llama al método de ejecución del objeto Runnable; o de lo contrario, este método no hará nada tan bien como, regresa. Siempre que se pueda extender la clase de subproceso y que el método run () se anule durante la subclase, se llama al método run () anulado.

vacíosetName ( nombre de cadena )

Altera el nombre con este hilo para que sea comparable al nombre del argumento.

hoyo estatico

Sueño ( long millis ) tira interrumpido / excepción
Hace que el hilo que se está ejecutando actualmente descanse
La cantidad requerida de milisegundos.
hoyo estaticoel sueño ( long millis, int nanos ) arroja InterruptedException

Hace que el subproceso actualmente en ejecución se suspenda (cese de ejecución) durante la cantidad requerida de milisegundos, así como la cantidad particular de nanosegundos.

vacíocomienzo()

Activa estos hilos para comenzar la ejecución; Java Virtual Machine llama al método de ejecución de ese hilo.

hoyo estaticorendimiento()

Activa el objeto de hilo actual para pausar brevemente y permitir que se ejecuten hilos adicionales.

hilo estáticocurrentThread ()

Devuelve una mención del objeto de hilo actualmente en ejecución.

Conclusión

  • Fácil de comenzar a usar hilos, extremadamente difícil de entender.
  • El diseño de clases que contienen métodos que pueden ser seguros para subprocesos es un desafío.
  • Lea: JavaDoc para obtener la clase java.lang.Thread

Artículo recomendado

Esta ha sido una guía para el ciclo de vida del hilo en Java. Aquí discutimos qué es el hilo? y diferentes estados del ciclo de vida del hilo junto con la creación de hilos en java. También puede consultar nuestros otros artículos sugeridos para obtener más información:

  1. Marcos en Java
  2. Patrones de estrellas en Java
  3. Combinar Ordenar en Java
  4. Los mejores compiladores de Java
  5. Método estático en PHP