作者:京東物流 崔冬冬
一、System.nanoTime()
java中,有這么一個(gè)方法System.nanoTime() ,你用過嗎?
二、與System.currentTimeMillis()對(duì)比
System.currentTimeMillis()我們經(jīng)常使用,可以參考對(duì)比一下
看方法意思,一個(gè)是納秒,一個(gè)是毫秒,二者有關(guān)系嗎?
先看看單位換算:一秒=1000毫秒 1毫秒=1000微秒 1微秒=1000納秒
那么1毫秒=1000000納秒,二者是不是這樣的倍數(shù)關(guān)系?
帶著疑問,我們本地打印測(cè)試一下
System.out.println("毫秒="+System.currentTimeMillis()); System.out.println("納秒="+System.nanoTime()); 輸出: 毫秒=1729763507201 納秒=257832682992
很顯然,不是 1:1000000的關(guān)系,具體是什么呢?
三,方法解釋
看一下源碼中的方法解釋
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.
大概意思,該方法返回正在運(yùn)行的Java虛擬機(jī)的高分辨率時(shí)間源的當(dāng)前值,單位為納秒。系統(tǒng)啟動(dòng)時(shí)間到現(xiàn)在經(jīng)歷的時(shí)間,與任何其他系統(tǒng)或掛鐘時(shí)間概念無關(guān)。
四,使用場(chǎng)景
如此精度的時(shí)間,使用場(chǎng)景有哪些呢
1) 性能分析:常用于性能分析和優(yōu)化,System.nanoTime()可以測(cè)量代碼段的執(zhí)行時(shí)間,幫助開發(fā)人員找出性能瓶頸并進(jìn)行優(yōu)化。
比如:一個(gè)簡(jiǎn)單的for循環(huán),我們用System.nanoTime()計(jì)時(shí),可以見更精細(xì)的耗時(shí)。
2) 計(jì)時(shí)器:在需要精確計(jì)時(shí)的場(chǎng)景下,如計(jì)算程序執(zhí)行時(shí)間、延遲等,System.nanoTime()可以提供更精確的時(shí)間信息,避免受系統(tǒng)時(shí)間調(diào)整的影響。
3) 并發(fā)控制:在多線程編程中,我們可能需要實(shí)現(xiàn)一些并發(fā)控制策略,如超時(shí)控制、任務(wù)調(diào)度等??梢杂糜讷@取時(shí)間戳,幫助實(shí)現(xiàn)這些并發(fā)控制策略。
4) 隨機(jī)種子:Random類構(gòu)造函數(shù)中使用System.nanoTime()作為種子值,提高隨機(jī)性。具體可以看一下Random類。
五,簡(jiǎn)單總結(jié)
1)System.nanoTime()是高精度計(jì)數(shù)器,是相對(duì)時(shí)間。
2)jdk源碼中很多地方使用了System.nanoTime(),我們可以學(xué)習(xí)參考。
3)小知識(shí)分享,不足之處歡迎大家指正,關(guān)于java里的知識(shí)點(diǎn)也歡迎大家討論分享。
審核編輯 黃宇
-
JAVA
+關(guān)注
關(guān)注
19文章
2966瀏覽量
104700
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論