Concurrency Intermediário

Substitua Timer e TimerTask por ScheduledExecutorService para um trabalho agendado 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);
Viu um problema com este código? Nos avise.
🧵

Melhor isolamento

Um pool de threads configurável evita que agendamentos não relacionados compartilhem um único worker frágil.

🛡

Execução robusta

Uma tarefa que falha não encerra o scheduler.

🎛

Ciclo de vida controlável

Futures, cancelamento, atrasos e encerramento usam as APIs padrão de executors.

Abordagem Antiga
Timer e TimerTask
Abordagem Moderna
ScheduledExecutorService
Desde o JDK
5
Dificuldade
Intermediário
De tarefas de Timer para executores agendados
Disponível

Amplamente disponível desde o JDK 5 (set. 2004)

O Timer executa cada tarefa em uma única thread, então uma tarefa demorada atrasa as demais, e uma exceção não tratada encerra a thread do timer. O ScheduledExecutorService usa o framework de executors, suporta múltiplos workers, retorna handles ScheduledFuture e oferece gerenciamento explícito de ciclo de vida. O componente proprietário deve encerrar o scheduler quando ele não for mais necessário.