Introducción a la Programación Multihilo

Avanzado

A pesar de que Java contiene muchas características innovadoras, una de las más emocionantes es su soporte integrado para programación multihilo. Un programa multihilo contiene dos o más partes que se pueden ejecutar simultáneamente.

Cada parte de dicho programa se denomina hilo (thread) y cada hilo define una ruta de ejecución independiente. Por lo tanto, multihilo (Multithreaded) es una forma especializada de multitarea.

1. Fundamentos de Multihilo

Hay dos tipos distintos de multitareas: basado en procesos y basado en hilos. Es importante entender la diferencia entre los dos.

  • Un proceso es, en esencia, un programa que se está ejecutando. Por lo tanto, la multitarea basada en procesos es la característica que le permite a su computadora ejecutar dos o más programas al mismo tiempo. Por ejemplo, es una multitarea basada en procesos que le permite ejecutar el compilador de Java al mismo tiempo que utiliza un editor de texto o navega por Internet. En la multitarea basada en procesos, un programa es la unidad de código más pequeña que puede enviar el planificador.
  • En un entorno multitarea basado en hilos, el hilo es la unidad más pequeña de código distribuible. Esto significa que un solo programa puede realizar dos o más tareas a la vez. Por ejemplo, un editor de texto puede formatear texto al mismo tiempo que está imprimiendo, siempre que estas dos acciones se realicen mediante dos hilos separados. Aunque los programas Java utilizan entornos multitarea basados en procesos, la multitarea basada en procesos no está bajo el control de Java. La multitarea multihilo lo es.

2. Ventajas de Multihilo

Una ventaja principal del multihilo es que le permite escribir programas muy eficientes porque le permite utilizar el tiempo de inactividad que está presente en la mayoría de los programas. Como probablemente sepa, la mayoría de los dispositivos de E/S, ya sean puertos de red, unidades de disco o el teclado, son mucho más lentos que la CPU. Por lo tanto, un programa a menudo pasará la mayor parte de su tiempo de ejecución esperando para enviar o recibir información hacia o desde un dispositivo.

Al usar multihilo, tu programa puede ejecutar otra tarea durante este tiempo de inactividad. Por ejemplo, mientras una parte de tu programa está enviando un archivo a través de Internet, otra parte puede leer la entrada del teclado, y otra puede almacenar el siguiente bloque de datos para enviar. ¿interesante, no es así?

Como probablemente sepa, en los últimos años, los sistemas multiprocesador y multinúcleo se han convertido en algo común. Por supuesto, los sistemas de un solo procesador todavía están en uso generalizado. Es importante comprender que las características multihilo de Java funcionan en ambos tipos de sistemas. En un sistema de núcleo único, los hilos de ejecución simultáneas comparten la CPU, y cada hilo recibe un trozo de tiempo de CPU.

Por lo tanto, en un sistema de núcleo único, dos o más hilos no se ejecutan al mismo tiempo, pero se utiliza el tiempo de CPU inactivo. Sin embargo, en sistemas multiprocesador/multinúcleo, es posible que dos o más hilos se ejecuten de manera simultánea. En muchos casos, esto puede mejorar aún más la eficiencia del programa y aumentar la velocidad de ciertas operaciones.

3. Hilos en Java

Un hilo puede estar en uno de varios estados. Puede estar ejecutándose. Puede estar listo para ejecutarse tan pronto como tenga tiempo de CPU. Se puede suspender un hilo en ejecución, que es un alto temporal a su ejecución. Puede luego reanudarse. Un hilo se puede bloquear cuando se espera un recurso. Un hilo puede terminar, en cuyo caso su ejecución finaliza y no puede reanudarse.

Junto con la multitarea basada en hilos viene la necesidad de un tipo especial de característica llamada sincronización (synchronization), que permite coordinar la ejecución de hilos de determinadas maneras bien definidas. Java tiene un subsistema completo dedicado a la sincronización, y sus características clave también se describen aquí.

Si ha programado para sistemas operativos como Windows, entonces ya está familiarizado con la programación multihilo. Sin embargo, el hecho de que Java maneje los hilos a través de elementos de lenguaje hace que el multihilo sea especialmente conveniente. Muchos de los detalles se manejan por usted.

4. La clase Thread y la interfaz Runnable

El sistema multihilo de Java se basa en la clase Thread y su interfaz complementaria, Runnable. Ambos están empaquetados en java.lang. El hilo encapsula un hilo de ejecución. Para crear un nuevo hilo, su programa extenderá Thread o implementará la interfaz Runnable.

La clase Thread define varios métodos que ayudan a administrar los hilos. Estos son algunos de los más utilizados (los analizaremos más de cerca a medida que se usen):

Tabla de métodos de la clase Thread.
MétodoSignificado
final String getName()Obtiene el nombre de un hilo.
final int getPriorityObtiene la prioridad de un hilo.
final boolean isAlive()etermina si un hilo todavía se está ejecutando.
final void join()Espera a que termine un hilo.
void run()Punto de entrada para el hilo.
static void sleep(long milisegundos)Suspende un hilo durante un período específico de milisegundos.
void start()Inicia un hilo llamando a su método run().

Todos los procesos tienen al menos un hilo de ejecución, que generalmente se denomina hilo principal (main thread), porque es el que se ejecuta cuando comienza el programa. Por lo tanto, el hilo principal es el hilo que han estado utilizando todos los programas de ejemplo anteriores en esta página. Desde el hilo principal, puede crear otros hilos. Continué con Cómo crear hilos en Java

Programación Multihilo
  • Multihilos en Java

Sobre el Autor:

Hey hola! Yo soy Alex Walton y tengo el placer de compartir conocimientos hacía ti sobre el tema de Programación en Java, desde cero, Online y Gratis.

Deja una Respuesta

*

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.