java.util.Timer 行为异常

标签 java timer

我使用 java.util.Timer.scheduleAtFixedRate() 安排了一个 TimerTask 在固定时间运行,间隔为一天。 TimerTask 有一个逻辑来控制执行时间,例如 6 小时。计时器应该在第二天相同的给定时间开始此任务。但有时任务在持续时间结束后立即重新启动。我没有看到这种情况发生的任何模式,它只是随机发生的。我已经通过多次运行该应用程序对此进行了测试,但无法识别任何特定模式。

是这样的。

class App{
  public static void main(final String[] args) {
    Timer timer = new Timer();
    ProcessManagerTask processManager = new ProcessManagerTask()
    timer.scheduleAtFixedRate(processManager, today @ 01 AM, 1440 minutes))
    //some logic to keep this running forever
  }
}

public class ProcessManagerTask extends TimerTask {
  public ProcessManagerTask(){
    //end time = today @ 7 AM
  }
  public void run() {
    while(end time is not expired){
      //do some stuff
    }
}

ProcessManagerTask 有时会在 7 点立即重新启动(当任务结束时)。

编辑:大家知道为什么计时器会出现问题。我还是没能弄清楚。

编辑 [2011 年 4 月 8 日]:伙计们,定时器的问题仍然没有解决。如果有人可以提供帮助,我将不胜感激。

最佳答案

来自文档:

If an execution is delayed for any reason (such as garbage collection or other background activity), two or more executions will occur in rapid succession to "catch up."

因此,您的任务似乎没有在凌晨 1 点整执行,因此执行了两次。

关于java.util.Timer 行为异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5326467/

相关文章:

java - 如果给出了指定的总和,如何让Java忽略前面的指令?

java - 绘画组件无法运行

javascript - 延迟启动 jQuery 旋转器,彼此相隔一秒

c++ - 将重复计时器附加到不同的代码库

c# - 从 C# 中的不同线程启动计时器

javascript - 在 ComponentDidMount 中停止和启动 setInterval

java - 如何获取 JavaFX TableColumn 的内容?

java - 泰坦警告 : Query requires iterating over all vertices [(name <> null)]

java - Apache Camel 包扫描

java - ChronometerTickListner android 代码问题?