Java TimerTask 不取消

标签 java timer timertask

当我在 run 方法中调用 cancel() 时,我的 CheckStatus (TimerTask) 没有停止。 this.cancel() 也不起作用。我做错了什么?

import java.util.TimerTask;
class CheckStatus extends TimerTask {
   int s = 3;
   public void run() {
      if (s > 0)
      {
         System.out.println("checking status");
         s--;
      }
      else
      {
         System.out.println("cancel");
         cancel();
      }
   }
}

这是我的司机

import java.util.*;
class Game {
   static Timer timer;
   static CheckStatus status;

   public static void main(String[] args) throws InterruptedException {        
      CheckStatus status = new CheckStatus();
      timer = new Timer();
      timer.scheduleAtFixedRate(status, 0, 3000);
   }  
}

最佳答案

它对我有用——使用你发布的代码,我看到了:

checking status
checking status
checking status
cancel

... 仅此而已,表明 TimerTask 已被取消 - 它再也不会执行了。

您是否希望 Timer 在没有更多工作要做时自行关闭?它不会自动执行此操作。目前尚不清楚您的更大目标是什么,但避免这种情况的一种选择是让 TimerTask 也取消 Timer - 这会起作用,但它并不是非常好设计,意味着 TimerTask 不能在包含其他任务的计时器中正常运行。

关于Java TimerTask 不取消,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8530959/

相关文章:

java - 在 Java 中显示 Rserve 的结果(R 和 Java 的集成)

java - ListView 更改文本中的文本颜色

Java:更新时读取文件

android - 定时器、TimerTask 和电池消耗

Java:通过Timer调用方法,但被调用方法所做的更改不会保留在TimerTask之外

java - 如何重新启动 Java 应用程序?

java - 快速排序算法未正确分配枢轴

c# - 检查具体时间

c++ - Qt QLCDNumber 定时器

c - C语言中的计时器\计数器用于费率计算?