Saltar al contenido
Portada » Threads en Java

Threads en Java

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étodoComentario
getNameObtener el nombre del hilo
getPriorityObtener prioridad del hilo
isAliveDetermina si un hilo está en ejecución
joinEspera a la terminación de un hilo
runPunto de entrada para el hilo
sleepSuspende un hilo por un periodo de tiempo
startInicia 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

AsuntoDescripción
Tutorial básico y sintaxisTutorial 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 LambdaAquí te enseñamos las nociones más importantes para arrancas con funciones lambda
PalíndromosPrograma de ejemplo para el uso de palíndromos en Java.
Máquina Virtual de JavaTe explicamos el funcionamiento de la máquina virtual de java (Java Virtual Machine – JVM)
JDK, JRE y JVMDiferencias entre el JDK, JRE y JVM.
Mejores libros Java en EspañolHazte con los mejores libros Java para aprender paso a paso y profundizar en las mejores prácticas
TensorFlowManejo del API de TensorFlow para la construcción de grafos de operaciones y su ejecución
Tutorial Log4jTutorial para el manejo de Log4j, herramienta ágil y flexible para la gestión de Logs en Java
Java SecurityEntiende y aplica las posibilidades que da Java para mantener la seguridad
Tutorial JConsoleAprende los conceptos básicos de monitorización de procesos Java con JConsole
JavaFXTutorial de JavaFX, librería gráfica moderna para construcción de GUIs en móvil, escritorio y web.
Estructuras de datos en JavaExplicación y ejemplos de las estructuras de datos más importantes: listas, pila, cola, arbol.
JavaapiConjunto de clases, interfaces, métodos y paquetes que forman parte de la plataforma Java estándar
Algoritmo HuffmanMétodo eficiente para codificar datos, asignando códigos más cortos a los caracteres más frecuentes

Recursos redes

TemaDescripción
SocketsAprende lo básico sobre sockets en Java, construye tus protocolos.
WebsocketsConstruye un endpoint en Java al que conectar mediante Websockets.
FTPCódigo para implementar en Java un cliente FTP
IMAPCliente IMAP escrito en Java.
SMB/jCIFSUso de jCIFS para el acceso a recursos de red compartidos mediante SAMBA
Send Mail JavaEnvío de correos electrónicos a través de JavaMail API