我有一个关于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 2010-01-20 02:19:44
线程“Timer-1”中的异常java.lang.IllegalStateException:计时器已被取消。 – Faiz 2010-01-20 02:23:20
您可能想考虑转移到'java.util.concurrent'。 '定时器'被认为有点古老。 – 2010-01-20 02:34:15