System.nanoTime()與System.currentTimeMillis()的區別


System.nanoTime()的初始值是在本JVM實例啟動時"隨機"選擇的一個數字,隨着JVM的運行而遞增(常用來計算實時時間差),System.currentTimeMillis表示系統時間,這就導致了的它們的幾個差別:

  1. System.currentTimeMillis()表示系統時間(即UTC). System.nanoTime()無法表示當前時間,本質上它是一個隨機數字.
  2. 在同一機器上的不同JVM上,System.currentTimeMillis是相同的,System.nanoTime()是不同的.
  3. System.currentTimeMillis()系統時間敏感,System.nanoTime()系統時間不敏感.比如我們將系統時間往前調一秒,System.currentTimeMillis()相比修改前會減少1000.而System.nanoTime()不會變化.

基於System.nanoTime()系統時間不敏感的特性,它被廣泛應用在需要相對時間的場景中,如ScheduledThreadPoolExecutor,在0點0分添加一個1小時后執行的任務,那么只有在系統運行1小時后,它才會被觸發,在此期間無論如何修改系統時間都不會影響.



轉載:https://www.jianshu.com/p/4fc9c3238164


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM