2011-08-20 41 views
3

說現在是6點,我有一個Timer和預定在10點的TimerTask。之後,系統日期時間由其他服務(例如ntp)調整爲9點。我仍然希望我的TimerTask將在10點鐘被解僱,但它不,Timer仍然等待接下來的4個小時,並激發我的TimerTask。在這種情況下我應該怎麼做?java.util.Timer SystemTime效果?

回答

3

首先,如果你的時鐘出現了4小時,那麼你已經處於一個非常糟糕的混亂狀態。通常情況下,如果機器長時間未聯機,時間調整將只有毫秒或幾秒鐘 - 偶爾會有一兩分鐘。一種選擇是在設置定時器之前通過自己的NTP呼叫來檢查時間是否合理。

另一種選擇是使一個合理定期調用的計時器 - 例如每分鐘一次或5分鐘 - 它檢查時間,然後任選採取行動。它效率稍低,但我不希望喚醒單個線程執行一次簡單檢查一次或多次會對性能產生顯着影響。您應根據您需要定時器觸發的準確度以及您需要的性能影響很小來調整檢查的規律性。

+0

這只是一個例子。我想到的是SystemTime更改時Timer的行爲。 – secmask

+0

@secmask:那麼爲什麼給這樣一個不太可能的例子?你也應該告訴我們,你的任務執行時間接近所需的時間是多麼重要 - 你有什麼誤差容限等等。 –

+0

我有一個需要在某個時間點擊的TimerTask(物理時間,比如新Date的結果()+ x_hours),但是當有人改變系統時間時,我的TimerTask在這個時間點不會觸發,但是會在更晚或更早的時間觸發。我認爲這讓我(和一些人)感到困惑。 – secmask