Da attività Timer a executor pianificati
Sostituisci Timer e TimerTask con ScheduledExecutorService per un lavoro pianificato 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);
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.
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.