2013-01-13 32 views
0

我正在用Java編寫一個小程序作爲秒錶,但我不確定我是否在效率和準確性方面使用了正確的方法。java停止監視程序 - 一起使用System.nanoTime()和TimerTask

從我讀過的stackoverflow看來,System.nanoTime()是測量時間過去時最好的方法。是對的嗎?它在多大程度上精確到最接近的納秒,微秒,毫秒等。

另外,當我的秒錶正在運行時,我希望它顯示每秒鐘流逝的當前時間。爲此,我打算使用TimerTask並安排它每秒報告時間(轉換爲秒)。 這是最好的方法嗎?這會對準確度有影響嗎?

最後,用我目前的設計,這會耗盡計算機的大部分資源,例如處理時間。

PS抱歉不能分享太多的代碼,因爲我剛剛開始設計它。我只是不想浪費時間在一個效率低下的設計上,造成一個不準確的計時器。

回答

2

是的,您可以使用定期運行的java.util.TimerTimerTask,並且每秒更新一次您的視圖。不過,我認爲你不必處理nono秒,而你實際上只需要秒的分辨率。使用常規的System.currentTimeMillis()

+0

非常感謝。只是爲了澄清,如果我基於我第一次調用System.nanoTime()時計算時間,我該如何使用System.currentTimeMilis()?我還需要使用System.currentTime()以毫秒爲單位創建單獨的startTime嗎?再次感謝 –

+0

如果我正確理解您的任務,您只需創建一個知道更新您的視圖的計時器任務。然後創建一個全局「Timer」,並安排此任務每秒運行一次。任務應使用例如'System.currentTimeMillis()'檢索當前時間並更新視圖。 – AlexR

+1

由於納秒至少與currentTimeMillis一樣精確,爲什麼不使用納秒? (*此方法提供了納秒精度,但不一定是納秒分辨率(即值的更改頻率) - 除了分辨率至少與currentTimeMillis()*一樣好之外, – assylias