Java Timer, TimerTask, Tutorial de classe de lembrete com exemplo

Publicados: 2021-02-04
Java Timer, TimerTask, Tutorial de classe de lembrete com exemplo

java.util.Timer é uma classe de utilitário que pode ser usada para agendar uma thread para ser executada em um determinado momento no futuro. A classe Java Timer pode ser usada para agendar uma tarefa para ser executada uma única vez ou em intervalos regulares.

java.util.TimerTask é uma classe abstrata que implementa a interface Runnable e precisamos estender essa classe para criar nossa própria TimerTask que pode ser agendada usando a classe java Timer .

A classe Timer é thread-safe e vários threads podem compartilhar um único objeto Timer sem necessidade de sincronização externa. A classe Timer usa java.util.TaskQueue para adicionar tarefas em um determinado intervalo regular e a qualquer momento pode haver apenas um encadeamento executando o TimerTask, por exemplo, se você estiver criando um Timer para ser executado a cada 10 segundos, mas a execução de um único encadeamento leva 20 segundos, então o objeto Timer continuará adicionando tarefas à fila e assim que um encadeamento for concluído, ele notificará a fila e outro encadeamento começará a ser executado.

Classe de temporizador Java

A classe Timer usa os métodos Object wait e notify para agendar as tarefas. TimerTask é uma abstract class e nós a herdamos para fornecer implementação concreta. A classe TimerTask implements a interface Runnable , portanto, é um thread e, portanto, sua implementação de TimerTask também é um thread.

Exemplo de Timer e TimerTask muito simples: A tarefa é executada após 5 seconds .

Resultado:

Este programa simples ilustra as seguintes partes básicas da implementação e agendamento de uma tarefa a ser executada por um thread de timer:

  • Implemente uma subclasse personalizada de TimerTask . O método run contém o código que executa a tarefa. Neste exemplo, a subclasse é denominada CrunchifyReminder.
  • Crie um thread instanciando a classe Timer .
  • Instancie o objeto TimerTask ( new CrunchifyReminder() ).
  • Agende a tarefa de timer para execução.

Como posso executar este TimerTask repetidamente?

Resultado:

Por padrão, um programa continua em execução enquanto seus threads de timer estiverem em execução. Você pode encerrar um thread de timer de quatro maneiras:

  • Invoca cancel no temporizador. Você pode fazer isso em qualquer lugar do programa, como no método de run de uma tarefa de timer.
  • Faça do thread do timer um “daemon” criando o timer assim: new Timer(true) . Se os únicos encadeamentos restantes no programa forem encadeamentos daemon, o programa será encerrado.
  • Após a execução de todas as tarefas agendadas do timer, remova todas as referências ao objeto Timer . Eventualmente, o encadeamento do temporizador será encerrado.
  • Invoque o método System.exit , que faz com que o programa inteiro (e todos os seus threads) saia.