5 回答
TA贡献1818条经验 获得超7个赞
堵塞了。是不是用了多进程之类的啊,可能会存在堵塞。还有一种可能是上次的任务还没有执行完,然后这次任务也启动了,也会存在这种问题的。建议优化一下代码,然后定时尽量把时间隔开点,保证任务很在某个时间范围内执行完。最后还有一个可能,检查服务器的时间,是不是服务器时间和你本机对不上。
TA贡献1836条经验 获得超4个赞
1、Timer
[quote]与每个 Timer 对象相对应的是单个后台线程,用于[color=red]顺序地执行所有计时器任务[/color]。计时器任务应该迅速完成。[color=red]如果完成某个计时器任务的时间太长,那么它会“独占”计时器的任务执行线程[/color]。因此,这就可能延迟后续任务的执行,而这些任务就可能“堆在一起”,并且在上述不友好的任务最终完成时才能够被快速连续地执行。[/quote]
所以如果任务多可能造成延迟
2、此类不 提供实时保证 所以晚几秒很正常
3、
public void schedule(TimerTask task,
long delay,
long period)
[quote]安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。以近似固定的时间间隔(由指定的周期分隔)进行后续执行。
在固定延迟执行中,根据前一次执行的实际执行时间来安排每次执行。[color=red]如果由于任何原因(如垃圾回收或其他后台活动)而延迟了某次执行,则后续执行也将被延迟。[/color][color=red]从长期来看,执行的频率一般要稍慢于指定周期的倒数(假定 Object.wait(long) 所依靠的系统时钟是准确的)。 [/color]
固定延迟执行适用于那些需要“平稳”运行的重复活动。换句话说,[color=red]它适用于在短期运行中保持频率准确要比在长期运行中更为重要的活动。[/color]这包括大多数动画任务,如以固定时间间隔闪烁的光标。这还包括为响应人类活动所执行的固定活动,如在按住键时自动重复输入字符。
[/quote]
所以不适合你的任务。 可以考虑 quartz。
添加回答
举报