2009-07-17 35 views
0

我們需要密切關注來自Java程序的pc時鐘。爲此,我們每500毫秒使用scheduleAtFixedRate()安排一個Runnable。我們每次都從這裏調用System.currentTimeMillis()。如果我們看到有更大的差異,那麼500 ms + - 某個允許的增量,然後我們假設時鐘已經改變(然後我們需要做其他一些事情)。scheduleAtFixedRate的準確度是多少?

這是否是正確的做事方式? Linux上的測試表明,在正常操作期間50毫秒增量就足夠了。在Windows上,我們必須增加100 ms,否則,它認爲每次檢查都會改變時間。

有關如何做到這一點的任何其他想法?

回答

2

如果目標是檢測時鐘的變化,你可以測試當前時鐘對一個知道使用絕對時間源的時間服務器引用

看看這裏Java NTP client http://support.ntp.org/bin/view/Support/JavaSntpClient 更多信息,你就可以檢測到時鐘更改

+0

謝謝你的鏈接,但鏈接的問題已經評論說,它是一個天真的實現。 – 2009-07-17 11:46:30

0

我假設您使用類Timer和TimerTask。

也許你可以使用方法調度而不是scheduleAtFixedRate。 傳遞Date的方法schedule允許您爲執行日期設置任務,您可以在上次執行結束時保持重新計劃。 您也可以使用計劃傳遞延遲,它不會像scheduleAtFixedRate那樣執行追趕。

javadoc Timer

+1

現在Timer和TimerTask已經非常陳舊了。 ScheduledExecutorService可以完成所有這些工作。 – skaffman 2009-07-17 11:07:43

相關問題