System.nanoTime與System.currentTimeMillis的區別

來源:互聯網
上載者:User

標籤:

  平時產生隨機數時我們經常拿時間做種子,比如用 System.currentTimeMillis的結果,但是在執行一些迴圈中使用了System.currentTimeMillis,那麼每次的結 果將會差別很小,甚至一樣,因為現代的電腦運行速度很快。後來看到java中產生隨機數函數以及線程池中的一些函數使用的都是 System.nanoTime,下面說一下這2個方法的具體區別。

     

        System.nanoTime提供相對精確的計時,但是不能用他來計算當前日期,在jdk中的說明如下:

 

返回最準確的可用系統計時器的當前值,以毫微秒為單位。

此方法只能用於測量已過的時間,與系統或鐘錶 時間的其他任何時間概念無關。傳回值表示從某一固定但任意的時間算起的毫微秒數(或許從以後算起,所以該值可能為負)。此方法提供毫微秒的精度,但不是必 要的毫微秒的準確度。它對於值的更改頻率沒有作出保證。在取值範圍大於約 292 年(263 毫微秒)的連續調用的不同點在於:由於數字溢出,將無法準確計算已過的時間。

例如,測試某些代碼執行的時間長度:

   long startTime = System.nanoTime();   // ... the code being measured ...   long estimatedTime = System.nanoTime() - startTime; 

 

     System.currentTimeMillis返回的是從1970.1.1 UTC 零點開始到現在的時間,精確到毫秒,平時我們可以根據System.currentTimeMillis來計算當前日期,星期幾等,可以方便的與Date 進行轉換,下面時jdk中的介紹:

 

 

返回以毫秒為單位的目前時間。注意,當傳回值的時間單位是毫秒時,值的粒度取決於底層作業系統,並且粒度可能更大。例如,許多作業系統以幾十毫秒為單位測量時間。

請參閱 Date 類的描述,瞭解可能發生在“電腦時間”和國際標準時間(UTC)之間的細微差異的討論。

 

返回:
目前時間與國際標準時間 1970 年 1 月 1 日午夜之間的時間差(以毫秒為單位測量)。


所以在使用中,我們可以根據我們具體的目的去正確的選擇他們。

System.nanoTime與System.currentTimeMillis的區別

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.