Multiproceso en Java: aprenda con ejemplos

Publicado: 2022-06-23

Java es un lenguaje de programación que admite programas multiproceso. Los programas multihilo acomodan dos o más partes (hilos) que se ejecutan simultáneamente, manejando diferentes tareas, lo que permite un uso óptimo de la CPU. Multi-threading es una extensión de multitarea. La multitarea se puede definir como una característica en la que múltiples procesos comparten un recurso de procesamiento común como una unidad central de procesamiento.

Multithreading ramifica el concepto de multitarea a varias aplicaciones donde las operaciones definidas se pueden dividir en subprocesos individuales más pequeños.

Cada uno de estos subprocesos se ejecuta de forma simultánea e independiente con diferentes rutas de ejecución, de modo que una excepción en un subproceso no afecta el rendimiento de los demás.

Aprenda cursos de desarrollo de software en línea de las mejores universidades del mundo. Obtenga Programas PG Ejecutivos, Programas de Certificado Avanzado o Programas de Maestría para acelerar su carrera.

Tabla de contenido

¿Qué es multiproceso en Java?

El subproceso múltiple en Java es donde se ejecutan múltiples subprocesos simultáneamente para maximizar el tiempo de CPU.

Ciclo de vida de un hilo

Los hilos tienen diferentes etapas en su ciclo de vida. Son los siguientes:

  • Nuevo: el subproceso comienza su ciclo de vida como un subproceso nuevo. Permanece en esta etapa recién nacida hasta que un programa ejecuta el hilo.
  • Ejecutable: un subproceso nacido entra en la etapa ejecutable cuando un programa lo inicia. El subproceso comienza a ejecutar su tarea en esta etapa.
  • En espera: esta es una etapa de transición en la que un subproceso espera a que otro subproceso complete su tarea. Un subproceso en la etapa de espera cambia a una etapa ejecutable después de recibir una señal de otros subprocesos.
  • Espera cronometrada: esta es una etapa en la que un subproceso ejecutable puede ingresar durante un intervalo de tiempo específico. Los subprocesos en esta etapa vuelven a la etapa ejecutable al final del intervalo de tiempo específico.
  • Muerto: Esta es la etapa final en el ciclo de vida de un hilo. Un subproceso entra en esta etapa después de completar su tarea.

Beneficios de los subprocesos múltiples en Java

  • Como los subprocesos en Java son independientes, los subprocesos múltiples de Java no bloquean a los usuarios y pueden realizar muchas operaciones simultáneamente.
  • Como los subprocesos múltiples en Java permiten múltiples operaciones, ahorran tiempo y son eficientes.
  • El programa puede ejecutarse continuamente incluso si una parte de él es interceptada.
  • Mejora el rendimiento frente a los programas paralelos convencionales que utilizan múltiples procesos.
  • Creación de programas eficientes que aprovechan al máximo el tiempo de la CPU.
  • Mejora enormemente el tiempo de respuesta de aplicaciones complejas.
  • Requiere menos recursos en comparación con los programas paralelos tradicionales.

Orden de prioridad de subprocesos

El sistema operativo determina el cronograma de ejecución del subproceso en función de la prioridad del subproceso. La prioridad de un subproceso se determina en función del valor de su constante.

  • La constante 1 obtiene la prioridad mínima ( MIN_PRIORITY)
  • La constante 5 obtiene prioridad normal ( NORM_PRIORITY)
  • La constante 10 obtiene la máxima prioridad (MAX_PRIORITY)

Cursos y artículos populares sobre ingeniería de software

Programas Populares
Programa PG Ejecutivo en Desarrollo de Software - IIIT B Programa de Certificación Blockchain - PURDUE Programa de Certificado de Ciberseguridad - PURDUE MSC en Ciencias de la Computación - IIIT B
Otros artículos populares
Salario de ingeniero de nube en los EE. UU. 2021-22 Salario del arquitecto de soluciones de AWS en EE. UU. Salario de desarrollador de backend en los EE. UU. Salario de desarrollador front-end en EE. UU.
Salario de desarrollador web en EE. UU. Preguntas de la entrevista de Scrum Master en 2022 ¿Cómo iniciar una carrera en seguridad cibernética en 2022? Opciones de carrera en los EE. UU. para estudiantes de ingeniería

¿Cómo crear un hilo en Java?

Los hilos se pueden crear en Java de dos maneras:

  1. Extendiendo la clase de hilo
  2. Implementación de una interfaz ejecutable

Creación de un subproceso mediante la extensión de la clase de subprocesos

A continuación se dan algunos métodos de clase de subprocesos y sus funciones.

  • getName() : para obtener el nombre del hilo
  • getPriority(): Para obtener la prioridad del hilo
  • is Alive (): para encontrar si un hilo se está ejecutando
  • join (): esperar a que finalice un hilo
  • run() : Punto de entrada del hilo
  • sleep (): para suspender un hilo durante una ventana de tiempo específica.
  • start() : Para activar un hilo a través de su método run().

Paso 1 : invalide el método run() dado en la clase de hilo. Esto actúa como el punto de entrada para el subproceso, y toda la lógica del programa debe encerrarse en 4this.

La sintaxis del método run() es la siguiente:

ejecución de vacío público ( )

Paso 2: Inicie el objeto de subproceso mediante el método de inicio () cuya sintaxis es un inicio vacío () .

Aquí hay ejemplos de un programa de subprocesos múltiples en Java:

Ejemplo 1:

class MultithreadingDemo extiende Thread{

ejecución de vacío público(){

System.out.println(“Mi subproceso se está ejecutando”);

}

public static void main(String args[]){

MultithreadingDemo obj=new MultithreadingDemo();

obj.start();

}

}

La salida del programa anterior será:

Mi hilo se está ejecutando.

Ejemplo 2:

la clase Count extiende el subproceso

{

Contar()

{

super ("mi hilo se está extendiendo");

System.out.println(“mi subproceso se ha creado” + esto);

comienzo();

}

ejecución de vacío público ()

{

probar

{

para (int i=0 ;i<10;i++)

{

System.out.println(“Imprimiendo el conteo” + i);

Subproceso.dormir(1000);

}

}

catch (Excepción interrumpida e)

{

System.out.println(“mi hilo se interrumpió”);

}

System.out.println(“Mi conversación ha terminado”);

}

}

ejemplo de extensión de clase

{

public static void main(String args[])

{

Contar cnt = nuevo Contar();

probar

{

while(cnt.isAlive())

{

System.out.println(“El hilo principal estará vivo hasta que el hilo secundario viva”);

Subproceso.dormir(1500);

}

}

catch (Excepción interrumpida e)

{

System.out.println(“El hilo principal se interrumpió”);

}

System.out.println(“La ejecución del subproceso principal finalizó”);

}

}

La salida del programa anterior será

mi subproceso es createdThread[mi subproceso ejecutable, 5, principal]

El hilo principal estará vivo hasta que el hilo secundario viva

Imprimiendo el conteo 0

Imprimiendo el conteo 1

El hilo principal estará vivo hasta que el hilo secundario viva

Imprimiendo el conteo 2

El hilo principal estará vivo hasta que el hilo secundario viva

Imprimiendo la cuenta 3

Imprimiendo la cuenta 4

El hilo principal estará vivo hasta que el hilo secundario viva

Imprimiendo la cuenta 5

El hilo principal estará vivo hasta que el hilo secundario viva

Imprimiendo la cuenta 6

Imprimiendo la cuenta 7

El hilo principal estará vivo hasta que el hilo secundario viva

Imprimiendo la cuenta 8

El hilo principal estará vivo hasta que el hilo secundario viva

Imprimiendo la cuenta 9

mi ejecución de subprocesos ha terminado

La ejecución del subproceso principal finaliza

Creación de un subproceso mediante la implementación de una interfaz ejecutable

Hay tres pasos importantes a seguir al usar este método.

Paso 1 : una interfaz ejecutable debe implementar un método run(). Este método run() actúa como punto de entrada para el hilo y debe contener toda la lógica del programa.

La sintaxis del método run() es

ejecución de vacío público ()

Paso 2: un objeto de hilo debe activarse utilizando el constructor que se proporciona a continuación.

Thread(Ejecutable threadObj, String threadName);

Aquí threadObj actúa como la clase que implementa la interfaz ejecutable, y el nombre del hilo es el nombre que se le da al nuevo hilo.

Paso 3: después de crear el objeto de subproceso, puede iniciarse mediante el método start() que ejecuta el método run().

La sintaxis del método start () es la siguiente.

comienzo vacío ();

Puede encontrar un ejemplo de cómo crear un hilo implementando una interfaz ejecutable aquí .

Para obtener más información sobre subprocesos múltiples de Java y desarrollo de software, recomendamos inscribirse en el Programa Ejecutivo de Posgrado en Desarrollo de Software ofrecido por IIIT Bangalore en asociación con upGrad.

Executive PG Program in Software Development es un programa en línea de 13 meses diseñado para ayudar a los profesionales que trabajan a dar un gran salto en sus carreras a través de estudios de casos y proyectos relevantes para la industria. El programa también incluye más de diez sesiones en vivo de expertos de la industria para ayudar a los candidatos a aprender mejor.

El programa incluye proyectos de la industria para ayudar a los candidatos a tener experiencia práctica y exposición adecuada a la industria para que su aprendizaje sea relevante y práctico. La finalización del programa recompensará a los candidatos con la codiciada certificación IIIT B y el estatus de ex alumnos.

El programa viene con soporte de colocación de 360 ​​grados de upGrad que ha impactado a más de 40,000 estudiantes pagados de todos los rincones del mundo para mejorar aún más las cosas. upGrad tiene una base de estudiantes de más de 85 países, lo que brinda una oportunidad invaluable de tener una red global de pares para los candidatos.

¿Cuál es la diferencia entre multitarea y multiproceso en Java?

La multitarea es el proceso mediante el cual se pueden realizar muchas tareas simultáneamente, y el multiproceso es el proceso de ejecutar múltiples subprocesos al mismo tiempo, con cada subproceso realizando una tarea diferente.

¿La herencia múltiple es compatible con Java?

El lenguaje de programación Java admite la herencia múltiple, un proceso en el que una clase implementa más de una interfaz. Una clase puede tener diferentes implementaciones de un método (predeterminado o estático) en las interfaces. La herencia múltiple en Java se puede implementar solo con interfaces y no con clases, a diferencia del lenguaje C++.

¿Pueden los subprocesos múltiples mejorar el rendimiento de Java?

Multithreading mejora el rendimiento de Java al permitir que varias CPU atiendan el mismo problema. Esto no solo acelera el proceso, sino que también ayuda a resolver problemas de manera eficiente.