Precisando construir um sistema de monitoração fui apresentado a uma nova necessidade: Agendamento de tarefas utilizando o Java. Para implementação de agendamento de tarefas em Java basta o conhecimento de duas classes:
java.util.TimerTask – Classe abstrata que implementa a interface Runnable. Para criar uma Instância dessa classe é necessário sobrescrever o método run().
java.util.Timer – Essa classe permite que uma instância da classe abstrata TimerTask sejam agendadas e executada como uma Thread ou um daemon.
Chega de teoria, vamos à prática:
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
class Task extends TimerTask {
int i = 1; public void run() { System.out.println(i + " - " + new Date());
if (i++ == 5) { System.exit(0);}
}
}
public class Main {
public static void main(String[] args) { int inicioApos = 20000; int tempoParaProximaExecucao = 15000; Timer timer = new Timer(); timer.scheduleAtFixedRate(new Task(), inicioApos, tempoParaProximaExecucao);}
}
No código anterior, foi implementada uma Task que é iniciada após 20 segundos do inicio do programa e que roda a cada 15 segundos.
Uma opção para obter o mesmo resultado é utilizar:
timer.schedule(new Task(), new Date().getTime() + 20000, 15000);
Mas o método schedule, com a assinatura acima permite que uma tarefa seja executada qualquer data, basta passar uma instância de java.util.Date com o dia e hora desejado.
Somente as classe padrões para agendamento de tarefas em Java foram úteis para as min as minhas necessidades, mas, para agendamentos mais drásticos existe o Quartz Enterprise Job scheduler (http://www.opensymphony.com/quartz/).
0 comentários: