Concurrency Intermedio

Reemplaza Timer y TimerTask por ScheduledExecutorService para un trabajo programado robusto.

✕ Timer and TimerTask
Timer timer = new Timer("refresh-timer");
timer.scheduleAtFixedRate(new TimerTask() {
    @Override
    public void run() {
        refresh();
    }
}, 0, 60_000);
✓ ScheduledExecutorService
ScheduledExecutorService scheduler =
        Executors.newScheduledThreadPool(2);

scheduler.scheduleAtFixedRate(
        this::refresh, 0, 1, TimeUnit.MINUTES);
¿Ves un problema con este código? Cuéntanos.
🧵

Mejor aislamiento

Un pool de hilos configurable evita que tareas no relacionadas compartan un único worker frágil.

🛡

Ejecución robusta

Una tarea que falla no termina el propio scheduler.

🎛

Ciclo de vida controlable

Futures, cancelación, retrasos y apagado usan las API estándar de executors.

Enfoque Antiguo
Timer y TimerTask
Enfoque Moderno
ScheduledExecutorService
Desde JDK
5
Dificultad
Intermedio
De tareas de Timer a ejecutores programados
Disponible

Ampliamente disponible desde JDK 5 (sept. 2004)

Timer ejecuta cada tarea en un solo hilo, por lo que una tarea de larga duración retrasa a las demás, y una excepción no controlada termina el hilo del timer. ScheduledExecutorService usa el framework de executors, admite múltiples workers, devuelve manejadores ScheduledFuture y ofrece una gestión explícita del ciclo de vida. El componente propietario debe apagar el scheduler cuando ya no se necesite.