Hay dos Timer y dos Task, un Timer que arranca la alarma y otro que la para, una Task que ejecuta un contador y otra que para las Tasks y los Timers
import java.util.Timer;
import java.util.TimerTask;
public class Alarma {
private long tiempoCarenciaMilisegundos = 3000;
private long tiempoEjecucionAlarmaTask = 3000;
private AlarmaTimer alarmaTimer = new AlarmaTimer();
private AlarmaTask alarmaTask = new AlarmaTask();
private AlarmaParaTimer alarmaParaTimer = new AlarmaParaTimer();
private AlarmaParaTask alarmaPararTask = new AlarmaParaTask();
/**
* @param args
*/
public static void main(String[] args) {
System.out.println("Inicio del Main");
Alarma alarma = new Alarma(1000, 3000);
alarma.arrancaAlarmaTimer();
alarma.arrancaAlarmaParaTimer();
System.out.println("Fin del Main");
}
/**
* Constructor de la clase
* @param tiempoCarenciaMilisegundos
* @param tiempoEjecucionAlarmaTask
*/
public Alarma(long tiempoCarenciaMilisegundos,
long tiempoEjecucionAlarmaTask) {
this.tiempoCarenciaMilisegundos = tiempoCarenciaMilisegundos;
this.tiempoEjecucionAlarmaTask = tiempoEjecucionAlarmaTask;
}
private void arrancaAlarmaTimer() {
alarmaTimer.arrancaTimer();
}
private void arrancaAlarmaParaTimer() {
alarmaParaTimer.arrancaParaTimer();
}
public class AlarmaTask extends TimerTask {
private int contador = 0;
public void run() {
System.out.println("Se ejecuta la alarma " + contador++);
}
}
public class AlarmaTimer extends Timer {
private final Timer tiempo = new Timer();
public void arrancaTimer() {
tiempo.scheduleAtFixedRate(alarmaTask, tiempoCarenciaMilisegundos,
tiempoEjecucionAlarmaTask);
};
}
public class AlarmaParaTask extends TimerTask {
public void run() {
System.out.println("Se ejecuta la cancelacion de la alarma ");
alarmaTask.cancel();
alarmaTimer.cancel();
alarmaTimer.purge();
System.out.println("Se ejecuta el parado de este timer/task ");
alarmaPararTask.cancel();
alarmaParaTimer.cancel();
alarmaParaTimer.purge();
System.exit(0);
}
}
public class AlarmaParaTimer extends Timer {
private final Timer tiempo = new Timer();
public void arrancaParaTimer() {
tiempo.scheduleAtFixedRate(alarmaPararTask, 20000, 1);
};
}
}