我需要编写一个守护进程,它启动在不同时间唤醒的线程数。守护进程使用commons apache库用Java编写,并在Linux机器(Fedora 13)上运行。 一个线程每天唤醒以执行按计划发生的任务A. 但还有另一个线程计划在每个星期一早上6点起床,以执行一些未按计划发生的任务。问题是这个线程在实际的预定时间之前醒来了很多。它在上一次运行完成后运行2天,但它应该仅在一周后运行。等待时间是使用我们自己的计时器类正确计算的,因为这会重用现有代码,我没有看到这个问题。
这可能是什么问题?
由于
答案 0 :(得分:9)
Thread.sleep()不做任何保证,它可能比预期更早醒来。你应该总是在循环中使用它:
long curTime = System.currentTimeMillis();
while (wakeUpTime - curTime > 0) {
try {
Thread.sleep(wakeUpTime - curTime);
} catch (InterruptedException ex) { }
curTime = System.currentTimeMillis();
}