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。
添加回答
舉報