Multihilo en Java explicado [con ejemplos]

Publicado: 2021-06-15

Tabla de contenido

Hilos en Java

Los hilos en Java ayudan a la operación eficiente de un programa. Las dos unidades básicas de ejecución de proforma son el proceso y los hilos. Un proceso puede ser una aplicación, un programa o un entorno de ejecución autónomo.

Mientras que los hilos comparten un recurso con el del proceso y existen con él. Al menos un hilo está presente en cada aplicación Java llamado hilo principal. Se pueden crear varios subprocesos a partir del subproceso principal. Obtenga más información sobre cómo crear un hilo en Java.

Beneficios del subproceso de Java

  • Se requiere menos tiempo y recursos para crear un hilo en comparación con los procesos. Por lo tanto, los subprocesos también se denominan procesos ligeros.
  • Los hilos comparten los datos y el código del proceso principal.
  • La intercomunicación entre subprocesos es fácil en comparación con la intercomunicación en un proceso.
  • Los subprocesos en Java se pueden crear mediante la implementación de java.lang. Interfaz ejecutable.

Hilo único

Varias unidades de procesamiento están presentes en un programa, de las cuales la más pequeña se denomina subproceso único. Mediante el uso de la "clase de subprocesos", Java aplica los subprocesos. Existen dos tipos de hilo; el subproceso del daemon y el subproceso del usuario.

Cuando se va a limpiar la aplicación, se produce el uso de subprocesos daemon. Se ejecuta en segundo plano de una aplicación. Mientras que los subprocesos de usuario se crean cuando se inicia la aplicación por primera vez.

Ventajas del hilo único:

  • La sobrecarga de la aplicación se reduce a medida que se produce la ejecución de un solo subproceso en un sistema.
  • El costo de mantenimiento de la aplicación se reduce con el uso de hilos únicos.

Multitarea en Java

La multitarea se refiere al proceso de ejecución de múltiples tareas por parte de la CPU al mismo tiempo. A veces, el usuario puede cambiar la CPU entre tareas para colaborar con cada programa en conjunto. La memoria y los recursos separados se asignan a los procesos en la multitarea. De dos maneras, se puede lograr la multitarea.

1. Multiprocesamiento (multitarea basada en procesos)

  • Se asigna un área de memoria separada para cada proceso. Por lo tanto, hay una dirección para cada proceso en la memoria.
  • Los procesos son pesados.
  • Existe un alto costo de comunicación entre procesos.
  • Se requiere algo de tiempo para cambiar entre los procesos. Esto es necesario para actualizar listas, mapas de memoria, etc.

2. Multithreading (multitarea basada en hilos)

  • La misma dirección se comparte entre los subprocesos.
  • Los hilos son ligeros.
  • Hay un bajo costo de comunicación entre los hilos.

¿Qué es multiproceso?

Cuando dos o más subprocesos se ejecutan en un programa al mismo tiempo, el mecanismo se denomina subprocesos múltiples. Un solo proceso crea muchos subprocesos que aumentan la potencia de cálculo. Dos o más partes de un programa se ejecutan de manera que conducen a la máxima utilización de la CPU.

Los subprocesos se conocen como las partes individuales del programa. Los procesos en una aplicación pueden contener múltiples subprocesos o subprocesos únicos.
La máquina virtual de Java permite varios subprocesos de una aplicación. Cada hilo tiene su propia prioridad. Por lo tanto, se da preferencia de ejecución a los subprocesos que tienen una prioridad más alta que a los que tienen una prioridad más baja.

Para lograr la multitarea, se utiliza tanto el proceso de subprocesamiento múltiple como el de procesamiento múltiple. Debido a que un área de memoria compartida se usa en subprocesos múltiples, se usa principalmente sobre multiprocesamiento. La memoria se guarda ya que no se requiere una asignación adicional de memoria. Además, el tiempo necesario es menor que el del multiprocesamiento, ya que se produce un cambio de contexto entre subprocesos.

En animación, juegos, se utiliza Java multithreading . Haga clic si desea obtener más información sobre la arquitectura y los componentes de Java.

Se pueden utilizar dos mecanismos para crear subprocesos.

1. Extensión de clase de hilo

2. Implementación de la interfaz ejecutable

Clase de subproceso frente a interfaz ejecutable

  • La ampliación de la "clase de subprocesos" no puede ampliar otras clases, ya que las herencias múltiples no se admiten en Java. Pero con la implementación de la interfaz “Runnable”, se pueden extender otras clases base desde la clase.
  • La funcionalidad básica de un subproceso se puede ampliar mediante la ampliación de la clase Subproceso, ya que se proporcionan métodos incorporados, como interrupción(), rendimiento(), etc.
  • Se proporcionará un objeto que varios subprocesos pueden compartir cuando se use ejecutable.

Clase de subproceso de Java

La programación de subprocesos en Java se logra a través de la clase de subprocesos. Los constructores son proporcionados por la clase de subprocesos y los métodos para realizar operaciones de subprocesos. Una clase de hilo implementa una interfaz ejecutable y extiende la clase Object.

Algunos métodos comunes de subprocesos utilizados son:

  1. start (): la ejecución del subproceso se inicia con este método. La JVM llama al método run().
  2. sleep (milisegundos int): la ejecución del subproceso se detiene durante los milisegundos que se proporcionan a medida que el proceso de subprocesamiento se duerme a través de este método. Después de la pausa, la ejecución del hilo comienza de nuevo. Los subprocesos se pueden sincronizar a través de este método.
  3. getName (): el nombre del hilo se devuelve a través de este método.
  4. setPriority(int nueva prioridad): La prioridad del subproceso se cambia a través de este método.
  5. yield (): el subproceso actual se detiene con la ejecución de los otros subprocesos mediante este método.
  6. run(): El método es para iniciar una acción en el hilo.
  7. getPriority(): la prioridad del subproceso se devuelve mediante el uso de este método.
  8. setName (): el nombre del hilo se cambia a través de este método.
  9. getId(): la identificación del hilo se devuelve a través de este método.
  10. suspender (): el hilo se suspende a través de este método.

Ciclo de vida del hilo

El ciclo de vida del hilo tiene varias etapas, que se enumeran a continuación:

  1. Nuevo: la "clase de hilo" se usa para crear un hilo en esta etapa. Hasta que se inicia el subproceso, el programa permanece en esta etapa. El método también se llama hilo nacido.
  2. Ejecutable: el método de inicio invoca la instancia del subproceso en esta etapa del ciclo de vida del subproceso. El programador se entrega con el control del subproceso para finalizar la ejecución. Si el subproceso debe ejecutarse o no depende del programador.
  3. En ejecución: una vez que se inicia la ejecución del subproceso, la etapa cambia a la etapa de "ejecución". El planificador selecciona un subproceso del conjunto de subprocesos e inicia la ejecución de la aplicación.
  4. En espera : como sugiere el nombre, en esta fase del ciclo de vida el hilo espera. La sincronización de subprocesos es esencial debido a la ejecución de varios subprocesos en una aplicación. Por lo tanto, existe la necesidad de que un subproceso espere hasta que termine la ejecución del otro subproceso. Por lo tanto, la etapa del ciclo de vida también se conoce como etapa de espera.
  5. Muerto: la etapa en la que se produce la terminación del subproceso se denomina etapa "muerta". Una vez que el subproceso se transfiere desde la ejecución hasta el final del procesamiento, se termina y, por lo tanto, se encuentra en el "estado muerto".

Sincronización de subprocesos en Java

El comportamiento asíncrono se produce en un programa en el caso de subprocesos múltiples. Si supuestamente los datos se escriben a través de un subproceso y la lectura de los datos se lleva a cabo por otro subproceso simultáneamente, se podría crear una inconsistencia en la aplicación.

Los recursos que se comparten entre subprocesos deben ser accedidos por otros subprocesos. Por lo tanto, en tales casos, se aborda el enfoque de sincronización. Los métodos sincronizados están disponibles en Java para lograr un comportamiento de sincronización.

Cuando un subproceso alcanza el bloque sincronizado, una vez que lo alcanza, otros subprocesos no pueden llamar al método en el mismo objeto. Hasta que el subproceso termine de ejecutar el bloque y salga de él, los otros subprocesos deben detenerse y esperar.

Aprenda cursos de software en línea de las mejores universidades del mundo. Obtenga programas Executive PG, programas de certificados avanzados o programas de maestría para acelerar su carrera.

Ventajas de los subprocesos múltiples

  • Se pueden realizar varias operaciones al mismo tiempo. Con los subprocesos independientes en ejecución, el usuario no está bloqueado.
  • Se ahorra tiempo ya que varias operaciones se ejecutan juntas.
  • Un hilo no puede verse afectado por otro hilo ya que son independientes. La ocurrencia de una excepción en un hilo no afecta la ejecución de otros hilos.

Ejemplo de subprocesamiento múltiple

A continuación se muestra un ejemplo de un programa multiproceso en Java:

Fuente

Figura 1: un fragmento del ejemplo de código de subprocesos múltiples

La explicación del código

Línea 3: La clase "GuruThread1" implementa ejecutable.

Línea 8: Muestra el método principal de la clase.

Línea 9: se crea una instancia de la clase de hilo y se crea una instancia "guruThread1" y se crea un hilo.

Línea 10: se instancia la "clase de hilo" y se crea una instancia "guruThread2" y un hilo.

Línea 11: Se inicia el subproceso llamado guruThread1.

Línea 12: Se inicia el subproceso denominado guruThread2.

Línea 13: Se genera el texto "Los nombres de los subprocesos son los siguientes:".

Línea 14: El método getName() se usa para obtener el nombre del subproceso1.

Línea 15: El método getName() se usa para obtener el nombre del subproceso2.

La ejecución del código anterior da como resultado el siguiente resultado:

Fuente

Figura: Una captura de pantalla de la salida generada por el programa de subprocesos múltiples en Java (tomada de

Conclusión

El artículo discutió el concepto de subprocesos múltiples en Java junto con un ejemplo de un programa de subprocesos múltiples en Java. Su aprendizaje no se detiene aquí y se lleva bien con todos los demás conceptos básicos de Java.

Si está interesado en dominar sus habilidades de programación a un precio amigable y prepararse para la industria, puede consultar el curso que ofrece upGrad "Master of Science in Computer Science". Es para todos los profesionales de nivel medio dentro del rango de edad de 21 a 45 años de edad. El curso está certificado por la Universidad John Moores de Liverpool y está diseñado con más de 500 horas de aprendizaje, 309 proyectos y tareas para sacar lo mejor de ti. Si tiene alguna consulta, envíenos un mensaje, nuestro equipo se pondrá en contacto con usted.

Aterrice en el trabajo de sus sueños

Solicite el programa Executive PG en desarrollo de software de IIIT-B