作者:京東物流 崔冬冬
一、System.nanoTime()
java中,有這么一個方法System.nanoTime() ,你用過嗎?
二、與System.currentTimeMillis()對比
System.currentTimeMillis()我們經常使用,可以參考對比一下
看方法意思,一個是納秒,一個是毫秒,二者有關系嗎?
先看看單位換算:一秒=1000毫秒 1毫秒=1000微秒 1微秒=1000納秒
那么1毫秒=1000000納秒,二者是不是這樣的倍數關系?
帶著疑問,我們本地打印測試一下
System.out.println("毫秒="+System.currentTimeMillis()); System.out.println("納秒="+System.nanoTime()); 輸出: 毫秒=1729763507201 納秒=257832682992
很顯然,不是 1:1000000的關系,具體是什么呢?
三,方法解釋
看一下源碼中的方法解釋
Returns the current value of the running Java Virtual Machine's high-resolution time source, in nanoseconds. This method can only be used to measure elapsed time and is not related to any other notion of system or wall-clock time. The value returned represents nanoseconds since some fixed but arbitrary origin time (perhaps in the future, so values may be negative). The same origin is used by all invocations of this method in an instance of a Java virtual machine; other virtual machine instances are likely to use a different origin.
大概意思,該方法返回正在運行的Java虛擬機的高分辨率時間源的當前值,單位為納秒。系統啟動時間到現在經歷的時間,與任何其他系統或掛鐘時間概念無關。
四,使用場景
如此精度的時間,使用場景有哪些呢
1) 性能分析:常用于性能分析和優化,System.nanoTime()可以測量代碼段的執行時間,幫助開發人員找出性能瓶頸并進行優化。
比如:一個簡單的for循環,我們用System.nanoTime()計時,可以見更精細的耗時。
2) 計時器:在需要精確計時的場景下,如計算程序執行時間、延遲等,System.nanoTime()可以提供更精確的時間信息,避免受系統時間調整的影響。
3) 并發控制:在多線程編程中,我們可能需要實現一些并發控制策略,如超時控制、任務調度等。可以用于獲取時間戳,幫助實現這些并發控制策略。
4) 隨機種子:Random類構造函數中使用System.nanoTime()作為種子值,提高隨機性。具體可以看一下Random類。
五,簡單總結
1)System.nanoTime()是高精度計數器,是相對時間。
2)jdk源碼中很多地方使用了System.nanoTime(),我們可以學習參考。
3)小知識分享,不足之處歡迎大家指正,關于java里的知識點也歡迎大家討論分享。
審核編輯 黃宇
-
JAVA
+關注
關注
19文章
2959瀏覽量
104553
發布評論請先 登錄
相關推薦
評論