我将其称为任务:
TimerTask taskA = new ThreadA(this);
TimerTask taskB = new ThreadB(this);
tasks.add(taskA);
tasks.add(taskB);
timer.schedule(taskA, 10000);
timer.schedule(taskB, 5000);下面是两个TimerTasks:
public class ThreadA extends TimerTask {
private Ghost ghost;
public GhostThread(Ghost ghost) {
this.ghost = ghost;
}
@Override
public void run() {
ghost.stopBeingDeadAndBeAwesomeAgain();
}
}
public class ThreadB extends TimerTask {
private Ghost ghost;
public WarnThread(Ghost ghost) {
this.ghost = ghost;
}
@Override
public void run() {
ghost.beDeadAgain();
}
}正如你所看到的,我只是在5个resp之后调用一个方法。10秒。我想不时地暂停“倒计时”。这意味着我希望直到5秒过去的时间不再运行。然后在稍后的时间点,我想恢复它。
我怎样才能做到这一点呢?
发布于 2010-07-31 05:45:23
最简单的解决方案是简单地复制一份TimerTask,取消它以暂停,如果您想要清除,然后重新安排它以恢复。
// pause
long timeLeft = 5000 - (new Date().getTime() - taskB.scheduledExecutionTime());
ThreadB taskBpaused = taskB.clone();
taskB.cancel();
timer.purge();
taskB = taskBpaused;
// resume
timer.schedule(taskB, timeLeft, ...);重要提示:如果任务还没有运行,那么这将不起作用。谷歌的文档指出,如果它没有运行,scheduledExecutionTime()将返回an undefined value,而我目前没有能力测试这到底是什么意思。不用说,如果您不确定它是否已经运行,您将需要某种条件来确保该值不是未定义的。
https://stackoverflow.com/questions/3375434
复制相似问题