Timer e
TimerTask são classes
Java usadas para executar tarefas paralelamente com o código que a dispara. Neste momento você pensa: "Mas,
Threads já fazem isso.". Sim, elas fazem, mas, o diferencial é que a classe
Timer faz com que a tarefa seja executada somente após um período de tempo ou periodicamente.
Primeiramente, crie uma classe que herde TimerTask. A classe não abstrata
PrintTask faz essa herança e implementa o método abstrato
+run(void):void. No método
run está a implementação da tarefa (imprimir o valor do contador e icrementar). Vide a
API para entender o método
cancel.
Agora, desejo que seja impresso no terminal o valor do contador a cada segundo. Então, usamos a classe
Timer para realizar essa tarefa. Basta fazer,
Timer tim = new Timer();
tim.scheduleAtFixedRate(new PrintTask(), 0, 1000);E pronto. A mágica acontece nos métodos de escalonamento da classe
Timer. Três tipos de escalonamento podem ser feitos:
- Única Execução
- Retardo Fixo
- Taxa Fixa
Explicação dos tipos de escanolamento
1- A única Execução é quando a tarefa do
TimerTask associado é executada uma única vez
Métodos:
--
public void schedule(Timer Task, Date time) - executa a tarefa na data especificada
--
public void schedule(Timer Task, long delay) - executa a tarefa após
delay millisegundos.
2 - O Retardo fixo é quando a tarefa do
associado é executada periodicamente de acordo com uma taxa de tempo especificada. E a periocidade é garantida. Ex: Suponha que a tarefa executa com taxa de 5 segundos e a sua última execução foi as 15:20:50 h , então, a próxima execução deve ser as 15:20:55, entretanto, diversos retardos podem ocorrer (devido a coleta de lixo, escalonamento de Threads e demais atividades) fazendo com que a próxima execução seja depois de 5.1 segundos (supostamente). Assim, o algoritmo de Retardo Fixo vai garantir que a execução ocorra no tempo correto, encurtando o intervalo do período.
Métodos:
-- public void schedule(Timer Task, Date firstTime, long period) - A tarefa é executada com escalonamento de Retardo Fixo, iniciando na data firstTime com uma taxa period.
-- public void schedule(Timer Task, long delay, long period) - A tarefa é executada com escalonamento de Retardo Fixo, iniciando após delay millisegundos com uma taxa period.
3 - O escalonamento de Taxa Fixa é quando uma tarefa do associado é executada periodicamente de acordo com uma taxa de tempo especificada e não há encurtamento do intervalo, uma vez que houve algum atraso. A importância está na frequência do evento.
Métodos:
-- public void scheduleAtFixedRate(Timer Task, Date firstTime, long period) - A tarefa é executada com escalonamento de Taxa Fixa, iniciando na data firstTime com uma taxa period.
-- public void scheduleAtFixedRate(Timer Task, long delay, long period) - A tarefa é executada com escalonamento de Taxa Fixa, iniciando após delay millisegundos com uma taxa period.