1

我正在使用 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 内没有延迟。

4

1 回答 1

1

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

根据 TimerTask 文档

对应于每个 Timer 对象的是单个后台线程,用于按顺序执行所有计时器的任务。定时器任务应该很快完成。如果一个定时器任务花费了过多的时间来完成,它就会“占用”定时器的任务执行线程。反过来,这可以延迟后续任务的执行,这些任务可能会在(如果)有问题的任务最终完成时“聚集”并快速连续执行。

于 2013-03-27T14:18:03.140 回答