使用Timer中的TimerTask进行调度的异常延迟

时间:2013-03-27 14:12:25

标签: 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(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中没有延迟。

1 个答案:

答案 0 :(得分:1)

在此任务之前可能正在运行其他内容,从而延迟了DailyProcess的初始执行。

根据TimerTask文档

对应每个Timer对象是一个用于的单个后台线程 按顺序执行所有计时器的任务。计时器任务应该快速完成。如果计时器任务需要花费很长时间才能完成,那么它就会生成#34; hogs"计时器的任务执行线程。反过来,这可以延迟后续任务的执行,这些任务可能会导致后续任务的结束。当(并且如果)违规任务最终完成时,快速连续执行。