Von Timer und TimerTask zu ScheduledExecutorService
Timer und TimerTask durch ScheduledExecutorService für robuste Aufgabenplanung ersetzen.
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);
Bessere Isolation
Ein konfigurierbarer Thread-Pool verhindert, dass sich unabhängige Zeitpläne einen fragilen Worker teilen.
Robuste Ausführung
Eine fehlschlagende Aufgabe beendet nicht den Scheduler selbst.
Steuerbarer Lebenszyklus
Futures, Abbruch, Verzögerungen und Herunterfahren nutzen Standard-Executor-APIs.
Weithin verfügbar seit JDK 5 (Sept. 2004)
Timer führt jede Aufgabe auf einem Thread aus, sodass eine lang laufende Aufgabe die anderen verzögert und eine unbehandelte Ausnahme den Timer-Thread beendet. ScheduledExecutorService nutzt das Executor-Framework, unterstützt mehrere Worker, liefert ScheduledFuture-Handles und bietet ein explizites Lifecycle-Management. Die besitzende Komponente muss den Scheduler herunterfahren, wenn er nicht mehr benötigt wird.