
Los hilos o threads en Java son procesos ligeros. También se conocen como hebras. Java proporciona la posibilidad de multihilo en su propio motor interno. El multithreading (multihilo) en Java permite que dos o más partes puedan ejecutarse de forma concurrente.
Aprende como implementar hilos en Java paso a paso con este tutorial básico.
1. El modelo de threads en Java
El entorno de ejecución de Java se apoya en los hilos en muchos aspectos. Los hilos reducen la ineficiencia previendo desaprovechar ciclos de CPU.
Estados los cuáles pueden encontrarse los hilos:
- New: Este es el primer estado, en cuando se crea la instancia de la clase Thread.
- Running: Cuando se encuentra en ejecución el hilo.
- Suspended: Un hilo puede ser suspendido temporalmente en su actividad. Tras esto, el hilo puede retomar su ejecución desde el punto donde se detuvo.
- Blocked: Un hilo puede quedarse bloqueado a la espera de un recurso.
- Terminated: Un hilo puede detenerse en cualquier momento, una vez terminado no puede retomar su ejecución.
2. Multihilos en Java: clase Thread e interfaz Runnable
El sistema multithreading de Java se construye entorno a la clase Thread, sus métodos y la interfaz Runnable. Para crear un nuevo hilo tu programa debe extender la clase Thread o implementar la interfaz Runnable.
Métodos que proporciona la clase Thread en los que apoyarse para gestionar los hilos:
Método | Comentario |
getName | Obtener el nombre del hilo |
getPriority | Obtener prioridad del hilo |
isAlive | Determina si un hilo está en ejecución |
join | Espera a la terminación de un hilo |
run | Punto de entrada para el hilo |
sleep | Suspende un hilo por un periodo de tiempo |
start | Inicia un hilo llamando a su método run |
2.1. Hilo Java Principal
Veremos como usar Thread y Runnable para crear y gestionar hilos, empezando con el hilo java principal.
2.1.1. Características principales del Thread Main (hilo principal)
- Afecta a los hilos ‘hijos’.
- Ejecuta acciones de apagado, cierre de hilos.
- Se crea automáticamente cuando se inicia un programa.
2.2. Cómo crear threads en Java
Pueden crearse de dos maneras:
- Implementando la interfaz Runnable.
- Extendiendo la clase Thread.
2.2.1. Interfaz Runnable
La forma más sencilla de crear un hilo en Java es crear una clase que implemente la interfaz Runnable:
public class MiClase implements Runnable {
public void run(){
System.out.println("Mi clase en ejecucion");
}
}
Para ejecutar el método run() por un hilo hay que pasar una instancia de MiClase a un Thread en su constructor:
Thread hilo = new Thread(new MiClase());
hilo.start();
2.2.2. Extender clase Thread
La segunda forma de crear un hilo es programar una clase que extienda Thread, sobrescribiendo el método run(). El método run() se ejecutará tras llamar a start():
public class MiClase extends Thread {
public void run(){
System.out.println("MiClase en ejecución");
}
}
Crear e iniciar el hilo anterior:
MiClase hilo = new MiClase();
hilo.start();
2.3. Crear múltiples threads en Java
class MiHilo implements Runnable
{
String nombre;
Thread hilo;
MiHilo (String nombre)
{
this.nombre = nombre;
hilo = new Thread(this, nombre);
System.out.println("Nuevo hilo: " + hilo);
hilo.start();
}
public void run()
{
try
{
for(int i = 5; i > 0; i--)
{
System.out.println(nombre + ": " + i);
Thread.sleep(1000);
}
}catch (InterruptedException e) {
System.out.println(nombre + "interrumpido");
}
System.out.println(nombre + " existe.");
}
}
A continuación la clase Main que lanzará varios hilos a partir de la clase anterior:
class MultiHilo
{
public static void main(String args[])
{
new MiHilo("Uno");
new MiHilo("Dos");
new MiHilo("Tres");
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
System.out.println("Main thread interrumpido");
}
System.out.println("Main thread existe.");
}
}
Recursos básicos Java
Asunto | Descripción |
Tutorial básico y sintaxis | Tutorial básico Java y sintaxis. Aprende los fundamentos del lenguaje. |
Hilos (Threads) | Aprende a manejar hilos y las cuestiones básicas de la concurrencia |
Funciones Lambda | Aquí te enseñamos las nociones más importantes para arrancas con funciones lambda |
Palíndromos | Programa de ejemplo para el uso de palíndromos en Java. |
Máquina Virtual de Java | Te explicamos el funcionamiento de la máquina virtual de java (Java Virtual Machine – JVM) |
JDK, JRE y JVM | Diferencias entre el JDK, JRE y JVM. |
Mejores libros Java en Español | Hazte con los mejores libros Java para aprender paso a paso y profundizar en las mejores prácticas |
TensorFlow | Manejo del API de TensorFlow para la construcción de grafos de operaciones y su ejecución |
Tutorial Log4j | Tutorial para el manejo de Log4j, herramienta ágil y flexible para la gestión de Logs en Java |
Java Security | Entiende y aplica las posibilidades que da Java para mantener la seguridad |
Tutorial JConsole | Aprende los conceptos básicos de monitorización de procesos Java con JConsole |
JavaFX | Tutorial de JavaFX, librería gráfica moderna para construcción de GUIs en móvil, escritorio y web. |
Estructuras de datos en Java | Explicación y ejemplos de las estructuras de datos más importantes: listas, pila, cola, arbol. |
Javaapi | Conjunto de clases, interfaces, métodos y paquetes que forman parte de la plataforma Java estándar |
Algoritmo Huffman | Método eficiente para codificar datos, asignando códigos más cortos a los caracteres más frecuentes |
Recursos redes
Tema | Descripción |
Sockets | Aprende lo básico sobre sockets en Java, construye tus protocolos. |
Websockets | Construye un endpoint en Java al que conectar mediante Websockets. |
FTP | Código para implementar en Java un cliente FTP |
IMAP | Cliente IMAP escrito en Java. |
SMB/jCIFS | Uso de jCIFS para el acceso a recursos de red compartidos mediante SAMBA |
Send Mail Java | Envío de correos electrónicos a través de JavaMail API |