Des tâches Timer aux exécuteurs planifiés
Remplacez Timer et TimerTask par ScheduledExecutorService pour un travail planifié robuste.
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);
Meilleure isolation
Un pool de threads configurable évite que des tâches planifiées indépendantes partagent un seul worker fragile.
Exécution robuste
Une tâche en échec ne met pas fin au planificateur lui-même.
Cycle de vie maîtrisable
Futures, annulation, délais et arrêt utilisent les API standard des exécuteurs.
Largement disponible depuis JDK 5 (sept. 2004)
Timer exécute chaque tâche sur un seul thread, de sorte qu'une tâche longue retarde les autres, et une exception non interceptée met fin au thread du timer. ScheduledExecutorService utilise le framework des exécuteurs, prend en charge plusieurs workers, renvoie des handles ScheduledFuture et offre une gestion explicite du cycle de vie. Le composant propriétaire doit arrêter le planificateur lorsqu'il n'est plus nécessaire.