簡體   English   中英

Java System.nanoTime()與System.currentTimeMillis()。 為什么它們有不同的輸出?

[英]Java System.nanoTime() vs System.currentTimeMillis(). Why do they have different outputs?

給出以下Java代碼:

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

它的輸出為

2626051678558
1377785791569

我原以為兩者之間會有一些差異,但是我錯了。
您有想法的人為什么會這樣嗎?

閱讀方法的javadoc

此方法只能用於測量經過時間,並且與系統或掛鍾時間的任何其他概念無關。 返回的值表示自某個固定但任意的原始時間以來的納秒(也許是將來的時間,因此值可能為負)。 在Java虛擬機的實例中,此方法的所有調用都使用相同的源。 其他虛擬機實例可能會使用其他來源。

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

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

正如Java文檔所說,nanoTime()是一個精密計時器。 currentTimeMillis()不是計時器,它是“掛鍾”。 nanoTime()始終會產生正的經過時間,currentTimeMillis不會(例如,如果您更改日期,hit秒等)

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM