我已安排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日]:计时器的问题仍未解决。如果有人可以提供帮助,我将不胜感激。
答案 0 :(得分:1)
因为你在Windows上运行它。一种选择是使用计划任务每天开始工作。一个很大的优点是即使重新启动机器,作业仍然会运行。在命令行启动的东西必须重新启动。
答案 1 :(得分:1)
来自文档:
如果由于任何原因(例如垃圾收集或其他后台活动)导致执行被延迟,则会快速连续执行两次或更多次执行以“赶上”。
因此,您的任务似乎没有在凌晨1点执行,因此执行了两次。