我正在使用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中没有延迟。
答案 0 :(得分:1)
在此任务之前可能正在运行其他内容,从而延迟了DailyProcess的初始执行。
根据TimerTask文档:
对应每个Timer对象是一个用于的单个后台线程 按顺序执行所有计时器的任务。计时器任务应该快速完成。如果计时器任务需要花费很长时间才能完成,那么它就会生成#34; hogs"计时器的任务执行线程。反过来,这可以延迟后续任务的执行,这些任务可能会导致后续任务的结束。当(并且如果)违规任务最终完成时,快速连续执行。