De tareas de Timer a ejecutores programados
Reemplaza Timer y TimerTask por ScheduledExecutorService para un trabajo programado robusto.
Timer timer = new Timer("refresh-timer");
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
refresh();
}
}, 0, 60_000);
ScheduledExecutorService scheduler =
Executors.newScheduledThreadPool(2);
scheduler.scheduleAtFixedRate(
this::refresh, 0, 1, TimeUnit.MINUTES);
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.
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.