Concurrency Intermédiaire

Remplacez Timer et TimerTask par ScheduledExecutorService pour un travail planifié robuste.

✕ 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);
Un problème avec ce code ? Dites-le nous.
🧵

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.

Ancienne Approche
Timer et TimerTask
Approche Moderne
ScheduledExecutorService
Depuis JDK
5
Difficulté
Intermédiaire
Des tâches Timer aux exécuteurs planifiés
Disponible

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.