java中使用TimerTask进行调度时出现异常延迟
我正在使用TimerTask安排每日运行的线程。这是代码java中使用TimerTask进行调度时出现异常延迟,java,timertask,Java,Timertask,我正在使用TimerTask安排每日运行的线程。这是代码 private void scheduleDailyProcess() { Calendar c = Calendar.getInstance(); c.add(Calendar.DATE, 1); c.set(Calendar.HOUR_OF_DAY, 0); c.set(Calendar.MINUTE, 5); c.set(Calendar.SECOND, 0); c.set(Calen
private void scheduleDailyProcess() {
Calendar c = Calendar.getInstance();
c.add(Calendar.DATE, 1);
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 5);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
Timer timer = new Timer();
int period = 24 * 60 * 60 * 1000; //24 hours
timer.schedule(new DailyProcess(), c.getTime(), period );
}
我希望线程每天早上00:05运行。但是我注意到线程以8秒的未指定延迟开始
我在代码中遗漏了什么吗?或者TimerTask有问题吗
DailyProcess中没有延迟。此任务之前可能正在运行其他内容,延迟DailyProcess的初始执行 根据TimerTask文档: 与每个计时器对象相对应的是一个用于
按顺序执行计时器的所有任务。计时器任务应快速完成。如果计时器任务花费过多的时间来完成,它会“占用”计时器的任务执行线程。这反过来又会延迟后续任务的执行,当(如果)有问题的任务最终完成时,这些任务可能会“聚集”并快速连续执行。有可能在该任务之前运行其他任务,从而延迟DailyProcess的初始执行 根据TimerTask文档: 与每个计时器对象相对应的是一个用于
按顺序执行计时器的所有任务。计时器任务应快速完成。如果计时器任务花费过多的时间来完成,它会“占用”计时器的任务执行线程。这反过来会延迟后续任务的执行,当(如果)有问题的任务最终完成时,这些任务可能会“聚集”并快速连续执行。您从哪里获得增量?您的程序中是否有定时打印输出?是的,我可以从日志中看到8秒的延迟。
TimerTask
不保证精确的执行时间。事实上,文档对此非常明确。如果您需要精度,我建议使用石英框架->。感谢您的澄清。您从哪里获得增量?您的程序中是否有定时打印输出?是的,我可以从日志中看到8秒的延迟。TimerTask
不保证精确的执行时间。事实上,文档对此非常明确。如果您需要精度,我建议使用Quartz framework->。感谢您的澄清。DailyProcess是此计时器对象执行的唯一线程。在此之前或之后都没有其他TimerTask。请仔细阅读有关TimerTask的文档。当系统试图在指定的时间运行任务时,无法保证它会在您指定的时间准确运行,并且有几个因素可能会导致某些偏差。如果每天任务的8秒偏移量对您的任务来说是不可接受的,那么您可能不能依赖TimerTask。8秒的延迟对我来说是可以接受的。感谢您的澄清。DailyProcess是此计时器对象执行的唯一线程。在此之前或之后都没有其他TimerTask。请仔细阅读有关TimerTask的文档。当系统试图在指定的时间运行任务时,无法保证它会在您指定的时间准确运行,并且有几个因素可能会导致某些偏差。如果每天任务的8秒偏移量对您的任务来说是不可接受的,那么您可能不能依赖TimerTask。8秒的延迟对我来说是可以接受的。谢谢你的澄清。