03 - Threads en Java

Un thread (hilo) es una línea independiente de ejecución dentro de un programa. Un programa Java siempre tiene al menos un hilo: el hilo principal, donde empieza main(). Podemos crear más hilos para que el programa haga varias cosas “a la vez” (concurrencia).

Por ejemplo, un servidor que atiende a varios clientes en paralelo crea un hilo por cada conexión para que no se bloqueen entre sí.

Implementando la interfaz Runnable

package es.cesguiro.threads;

public class RunnableThread implements Runnable {

    @Override
    public void run() {
        System.out.println("Task started by " + Thread.currentThread().getName());
    }
}

Usando una clase Anónima

package es.cesguiro.threads;

public class AnonymousThread {

    public Runnable startThread() {
        return new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("Task started by " + Thread.currentThread().getName());
            }
        });
    }
}

Con expresiones lambda (Java 8+)

package es.cesguiro.threads;

public class LambdaThread {

    public Runnable startThread() {
        return () -> System.out.println("Task started by " + Thread.currentThread().getName());
    }
}

package es.cesguiro.threads;

public class Main {
    public static void main(String[] args) {
        Thread thread1 = new Thread(new RunnableThread(), "RunnableThread");
        Thread thread2 = new Thread(new AnonymousThread().startThread(), "AnonymousThread");
        Thread thread3 = new Thread(new LambdaThread().startThread(), "LambdaThread");

        thread1.start();
        thread2.start();
        thread3.start();

        Runnable loopTask = () -> {
            for (int i = 1; i <= 10; i++) {
                System.out.println(Thread.currentThread().getName() + ": " + i);
                try {
                    Thread.sleep(1000); // Sleep for 1 second
                } catch (InterruptedException e) {
                    System.err.println("Thread interrupted: " + e.getMessage());
                }
            }
        };

        Thread thread4 = new Thread(loopTask, "LoopThread-1");
        Thread thread5 = new Thread(loopTask, "LoopThread-2");

        thread4.start();
        thread5.start();

    }
}

  • start() → Arranca el hilo (no llamar a run() directamente).

  • run() → Código que ejecutará el hilo.

  • sleep(ms) → Pausa el hilo actual.

  • join() → Espera a que otro hilo termine.

Los hilos comparten memoria → cuidado con las variables compartidas (condiciones de carrera).

Demasiados hilos pueden saturar CPU/memoria (más adelante veremos thread pools).

  • clase/daw/si/1eval/threads.txt
  • Última modificación: 2025/08/13 17:21
  • por cesguiro