Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中使用TimerTask进行调度时出现异常延迟_Java_Timertask - Fatal编程技术网

java中使用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

我正在使用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(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秒的延迟对我来说是可以接受的。谢谢你的澄清。