Concurrency Intermedio

Sostituisci Timer e TimerTask con ScheduledExecutorService per un lavoro pianificato 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);
Vedi un problema con questo codice? Faccelo sapere.
🧵

Isolamento migliore

Un pool di thread configurabile evita che pianificazioni non correlate condividano un unico worker fragile.

🛡

Esecuzione robusta

Un'attività non riuscita non termina lo scheduler stesso.

🎛

Ciclo di vita controllabile

Future, cancellazione, ritardi e arresto usano le API standard degli executor.

Approccio Vecchio
Timer e TimerTask
Approccio Moderno
ScheduledExecutorService
Dal JDK
5
Difficoltà
Intermedio
Da attività Timer a executor pianificati
Disponibile

Ampiamente disponibile da JDK 5 (sett. 2004)

Timer esegue ogni attività su un solo thread, quindi un'attività di lunga durata ritarda le altre e un'eccezione non gestita termina il thread del timer. ScheduledExecutorService utilizza il framework degli executor, supporta più worker, restituisce handle ScheduledFuture e offre una gestione esplicita del ciclo di vita. Il componente proprietario deve arrestare lo scheduler quando non è più necessario.