Saltar al contenido principal
Documentos
Java keywordsMatrices JavaProgramación orientada a objetos en JavaJava File HandlingIntroducción a JavaConceptos básicos del lenguaje Java

Hilos de Java

Los hilos de Java son una parte fundamental del modelo de concurrencia de Java, ya que permiten que varias tareas se ejecuten simultáneamente dentro de un programa. Un hilo es un proceso ligero que permite la ejecución paralela de código, mejorando el rendimiento y la capacidad de respuesta de la aplicación, especialmente en sistemas multinúcleo.

Utilización

Los hilos se utilizan en Java para realizar operaciones en segundo plano sin interrumpir el flujo principal del programa. Son ideales para tareas como manejar entradas de usuario, realizar cálculos o gestionar operaciones de E/S simultáneamente.

Crear hilos

Java proporciona dos formas principales de crear hilos:

  1. Ampliación de la clase Thread
  2. Implementación de la interfaz Runnable

Ejemplos

Ejemplo 1: Ampliar la Thread Clase


class MyThread extends Thread {
    public void run() {
        System.out.println("Thread is running.");
    }

    public static void main(String[] args) {
        MyThread thread = new MyThread();
        thread.start();
    }
}
    

En este ejemplo, una nueva clase MyThread amplía la clase Thread y anula el método run(). Se llama al método start() para iniciar la ejecución del hilo, que internamente llama al método run().

Ejemplo 2: Poner en práctica la Runnable Interfaz


class MyRunnable implements Runnable {
    public void run() {
        System.out.println("Thread is running.");
    }

    public static void main(String[] args) {
        Thread thread = new Thread(new MyRunnable());
        thread.start();
    }
}
    

Aquí, la clase MyRunnable implementa la interfaz Runnable y proporciona el método run(). Se crea un objeto Thread con una instancia de MyRunnable y se inicia mediante el método start().

Ejemplo 3: Uso de expresiones lambda


public class LambdaThreadExample {
    public static void main(String[] args) {
        Thread thread = new Thread(() -> {
            System.out.println("Thread is running using lambda.");
        });
        thread.start();
    }
}
    

Este ejemplo muestra la creación de un hilo utilizando las expresiones lambda de Java 8, que simplifican la sintaxis para implementar la interfaz Runnable.

Consejos y buenas prácticas

  • Seguridad de la rosca: Asegúrate de que se accede a los recursos compartidos de forma segura para evitar la incoherencia de los datos y las condiciones de carrera. Utiliza mecanismos de sincronización como synchronized bloques o ReentrantLock.
    
    synchronized (lockObject) {
        // critical section
    }
                
  • Evita el uso excesivo: Crear demasiados hilos puede provocar el agotamiento de los recursos. Utiliza pools de hilos (por ejemplo, ExecutorService) para gestionar los hilos de forma eficiente.
    
    ExecutorService executor = Executors.newFixedThreadPool(10);
    executor.execute(new MyRunnable());
    executor.shutdown();
                
  • Terminación Graciosa: Implementa un mecanismo para terminar los subprocesos cuando ya no sean necesarios. Utiliza banderas o interrupciones para indicar a los hilos que se detengan.
    
    class MyRunnable implements Runnable {
        private volatile boolean running = true;
    
        public void run() {
            while (running) {
                // perform task
            }
        }
    
        public void stop() {
            running = false;
        }
    }
                
  • Utiliza Utilidades de Concurrencia de Nivel Superior: Considera la posibilidad de utilizar las utilidades de concurrencia de Java del paquete java.util.concurrent, como CountDownLatch, CyclicBarrier, y ConcurrentHashMap, para simplificar las tareas de concurrencia complejas.
  • Manejar excepciones: Maneja siempre las excepciones dentro del método run() para evitar la finalización inesperada del hilo.
    
    public void run() {
        try {
            // perform task
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
                

Aprende Java Essentials

Desarrolla tus conocimientos de Java desde la base y domina los conceptos de programación.
Empieza a aprender gratis