У меня есть один простой вопрос относительно Java TimerTask. Как приостановить/возобновить две задачи TimerTask на основе определенного условия? Например, у меня есть два таймера, которые работают между собой. Когда в задаче первого таймера выполняется определенное условие, первый таймер останавливается и запускает второй таймер, и то же самое происходит, когда определенное условие выполняется в задаче второго таймера. Класс ниже точно показывает, что я имею в виду:Приостановка/остановка и запуск/возобновление Java TimerTask непрерывно?
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();
}
}
Так что мой вопрос, как я могу сделать паузу во время работы timer1
timer2
и наоборот, а timer2
работает? Производительность и сроки - моя главная проблема, так как это необходимо реализовать в другом потоке. Кстати, я пытаюсь реализовать эти параллельные таймеры на Android.
Благодарим за помощь!
Какое исключение? – cletus
Исключение из потока "Timer-1" java.lang.IllegalStateException: Таймер уже отменен. – Faiz
Возможно, вам стоит подумать о переходе к 'java.util.concurrent'. «Таймер» считается немного старой школой. –