2013-08-29 37 views
1

考慮下面的Java代碼:Java System.nanoTime()vs System.currentTimeMillis()。爲什麼他們有不同的產出?

class Tester 
    { 
    public static void main(String[] args) 
     { 
     System.out.println((System.nanoTime()/1000)); 
     System.out.println(System.currentTimeMillis()); 
     } 
    } 

它給了

 
2626051678558 
1377785791569 

輸出我期待兩者之間的差別不大,但我錯了。
你有什麼想法的傢伙爲什麼這樣表現?

+0

另外:納秒是百萬分之一秒,因此要將nanoTime()的輸出轉換爲毫秒級別,應該除以1000000而不是1000. –

回答

7

閱讀方法的javadoc

此方法僅可用於測量經過時間,而不是 有關的系統或掛鐘時間的任何其它概念。返回的值 表示自某些固定後的毫微秒,但任意原點 時間(可能在將來,因此值可能爲負值)。該方法的所有調用在 Java虛擬機的實例中都使用相同的 源;其他虛擬機實例可能會使用不同的來源。

nanoTime()沒有顯示你的時間。

0
 long currentTimeMillis = System.currentTimeMillis();  
     long nanos = TimeUnit.MILLISECONDS.toNanos(currentTimeMillis); 
     System.out.println(nanos); 
     System.out.println(TimeUnit.NANOSECONDS.toMillis(nanos)*1000000); 
+1

哇!這是處理**毫秒**和**納秒**的一段有用的腳本。但是,這似乎與這個問題沒有直接關係。 –

0

正如java doc所說,nanoTime()是一個精確計時器。 currentTimeMillis()不是定時器,它是「掛鐘」。 nanoTime()將始終產生正的流逝時間,currentTimeMillis不會(例如,如果您更改日期,打閏秒等)

0

如果您使用的是Android,nanoTime會受到深度睡眠模式的影響。使用SystemClock.elapsedRealtime()(返回msec)代替

相關問題