java.util.Timer表现得很奇怪

时间:2011-03-16 14:06:50

标签: java timer

我已安排TimerTask使用java.util.Timer.scheduleAtFixedRate()以固定时间运行,间隔为一天。 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时立即重启(当任务结束时)。

编辑:伙计们知道为什么问题出现在Timer上。我仍然无法理解。

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

2 个答案:

答案 0 :(得分:1)

因为你在Windows上运行它。一种选择是使用计划任务每​​天开始工作。一个很大的优点是即使重新启动机器,作业仍然会运行。在命令行启动的东西必须重新启动。

答案 1 :(得分:1)

来自文档:

  

如果由于任何原因(例如垃圾收集或其他后台活动)导致执行被延迟,则会快速连续执行两次或更多次执行以“赶上”。

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