如何取消java上的计时器?

时间:2014-08-13 18:24:54

标签: java timer

如何在i2 == 690时取消计时器。

这是我的代码:

Timer timer = new Timer();
timer = new Timer(false);
timer.schedule(new TimerTask() {
    @Override
    public void run() {
        if (i2 == 690) {
            timer.cancel();
        }
        i2--;
        System.out.println("Java " + i2);
    }
}, 0, 1000);

2 个答案:

答案 0 :(得分:3)

您必须致电TimerTask.cancel()。所以只需在run()方法中调用this.cancel(),而不是在timer上调用(因为this将引用run方法所属的匿名类实例。)

如果你需要取消定时器执行的其他任务,Timer.cancel()也会停止那些(你当前在做什么),但是不会停止当前正在执行的TimerTask,这就是为什么上面取消了TimerTask需要。

To quote from the Javadocs of Timer.cancel()

  

不会干扰当前正在执行的任务(如果存在)。

...

  

请注意,在此计时器调用的计时器任务的run方法中调用此方法绝对可以保证正在进行的任务执行是此计时器将执行的最后一次任务执行。

因此,如果这是您需要的,那么组合两个取消应该可以取消整个Timer。

答案 1 :(得分:2)

尝试

if (i2 == 690) {
timer.cancel();
timer.purge(); 
return;
}

Timer#cancel() - 终止此计时器,丢弃当前计划的任务。不会干扰当前正在执行的任务(如果存在)

Timer#purge() - 从此计时器的任务队列中删除所有已取消的任务。