De tarefas de Timer para executores agendados
Substitua Timer e TimerTask por ScheduledExecutorService para um trabalho agendado 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);
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.
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.