2015-04-03 33 views
0

如果我理解正確,System.currentTimeMillis()更快,而System.nanoTime()更準確。System.CurrentTimeMillis是否足夠精確以ping服務器?

如果我正在ping一臺服務器,在最壞的情況下,我希望採取......讓我們走極端......一分鐘,是System.currentTimeMillis()在1-2毫秒內仍然準確嗎?或者我應該去System.nanoTime()

我ping服務器,像這樣:

long startTime = System.nanoTime(); 
    getResponseFromServer(); 
    long endTime = System.nanoTime(); 
    return endTime - startTime; 

正如你所看到的,我目前使用的System.nanoTime(),但我不確定我是否應該使用System.currentTimeMillis()

System.currentTimeMillis vs System.nanoTime有關於這個問題的很多很好的信息,但沒有關於System.currentTimeMillis()的準確性的具體信息。

+1

您正在執行阻塞操作,該操作可能需要1分鐘,並且擔心nanoTime()的性能,該操作的運行時間僅爲微秒(即其運行速度比ping快數百萬倍)。爲什麼? – 2015-04-03 14:08:47

+0

我的目標是準確地獲取ping。我不在乎封鎖。 (也許因爲我不知道更好的...) – Evorlor 2015-04-03 14:12:50

+0

那麼既然你知道nanoTime更準確,你爲什麼關心它的性能呢?只需使用它:它會足夠快。 – 2015-04-03 14:18:25

回答

2

根據您的操作系統,currentTimeMillis()的分辨率可能高達30毫秒(Windows),並且可能在任何系統上都不會接近1毫秒。另一方面,nanoTime()具有幾十納秒的分辨率和延遲。所以當你說nanoTime()是「緩慢」時,確保你瞭解該資格的實際比例。

+0

http://stackoverflow.com/questions/351565/system-currenttimemillis-vs-system-nanotime是139 upvotes我的來源。也許我誤解了。謝謝!另外,「分辨率高達30毫秒」是什麼意思? – Evorlor 2015-04-03 14:12:01

+1

30 ms的分辨率意味着對該方法的兩次連續調用將永遠不會報告小於30 ms的差異。 – 2015-04-03 14:17:31