Tengo una pregunta simple sobre Java TimerTask. ¿Cómo pausar/reanudar dos tareas TimerTask en función de una determinada condición? Por ejemplo, tengo dos temporizadores que se ejecutan entre ellos. Cuando se ha cumplido una determinada condición dentro de la tarea del primer temporizador, el primer temporizador se detiene e inicia el segundo temporizador, y lo mismo sucede cuando se cumple una determinada condición dentro de la tarea del segundo temporizador. La clase de abajo muestra exactamente lo que quiero decir:Pausar/detener e iniciar/reanudar Java TimerTask continuamente?
public class TimerTest {
Timer timer1;
Timer timer2;
volatile boolean a = false;
public TimerTest() {
timer1 = new Timer();
timer2 = new Timer();
}
public void runStart() {
timer1.scheduleAtFixedRate(new Task1(), 0, 1000);
}
class Task1 extends TimerTask {
public void run() {
System.out.println("Checking a");
a = SomeClass.getSomeStaticValue();
if (a) {
// Pause/stop timer1, start/resume timer2 for 5 seconds
timer2.schedule(new Task2(), 5000);
}
}
}
class Task2 extends TimerTask{
public void run() {
System.out.println("Checking a");
a = SomeClass.getSomeStaticValue();
if (!a) {
// Pause/stop timer2, back to timer1
timer1.scheduleAtFixedRate(new Task1(), 0, 1000);
}
// Do something...
}
}
public static void main(String args[]) {
TimerTest tt = new TimerTest();
tt.runStart();
}
}
Así que mi pregunta es, ¿Cómo se detienen timer1
mientras se ejecuta timer2
y viceversa, mientras que timer2
se está ejecutando? El rendimiento y el tiempo es mi principal preocupación ya que esto debe implementarse dentro de otro hilo en funcionamiento. Por cierto, estoy tratando de implementar estos temporizadores simultáneos en Android.
Gracias por su ayuda!
¿Cuál es la excepción? – cletus
Excepción en el hilo "Timer-1" java.lang.IllegalStateException: El temporizador ya ha sido cancelado. – Faiz
Es posible que desee pensar en pasar a 'java.util.concurrent'. 'Timer' se considera un poco de la vieja escuela. –