03 - Threads en Java
Threads
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í.
Formas de crear un hilo
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());
}
}
Ejecutando varios hilos
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();
}
}
Métodos importantes
- 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.
Notas importantes
Los hilos comparten memoria → cuidado con las variables compartidas (condiciones de carrera).
Demasiados hilos pueden saturar CPU/memoria (más adelante veremos thread pools).