System.nanoTime()的初始值是在本JVM實體啟動時"隨機"選擇的一個數字,隨著JVM的運行而變化,System.currentTimeMillis表示系統時間,這就導致了的它們的幾個差別:
- System.currentTimeMillis()表示系統時間(即UTC). System.nanoTime()無法表示當前時間,本質上它是一個亂數字.
- 在同一機器上的不同JVM上,System.currentTimeMillis是相同的,System.nanoTime()是不同的.
- System.currentTimeMillis()系統時間敏感,System.nanoTime()系統時間不敏感.比如我們將系統時間往前調一秒,System.currentTimeMillis()相比修改前會減少1000.而System.nanoTime()不會變化.
基于System.nanoTime()系統時間不敏感的特性,它被廣泛應用在需要相對時間的場景中,如ScheduledThreadPoolExecutor,在0點0分添加一個1小時后執行的任務,那么只有在系統運行1小時后,它才會被觸發,在此期間無論如何修改系統時間都不會影響.
【填坑紀事】一次用System.nanoTime()填坑System.currentTimeMills()的實體記錄
本文由博客群發一文多發等運營工具平臺 OpenWrite 發布
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/194392.html
標籤:Java
