更新時間:2022-08-11 11:43:20 來源:動力節點 瀏覽2243次
Java運行時間計算的方法是什么?現在動力節點小編為大家介紹一些在 Java 中執行經過時間計算的主要方法。對Java感興趣的小伙伴也可以關注一下Java在線學習,里面的課程內容從入門到精通,相信對大家的學習一定會有所幫助的。
我們從一個簡單但通常不正確的解決方案開始我們在 Java 中測量經過時間的方法列表。首先,我們將展示一個如何執行計算的快速示例,然后我們將解釋代碼:
長啟動=系統。當前時間米利斯();// 一段時間過去了long end = System . 當前時間米利斯();long elapsedTime =結束-開始;
在上面的示例中,我們使用“System.currentTimeMillis()”靜態方法。該方法返回一個 long 值,它指的是自 1970 年 1 月 1 日以來的毫秒數,以 UTC 表示。那么,為什么這個解決方案有問題呢?
您從差異中得到的結果可能不準確,因為該方法測量的是我們所說的“掛鐘時間”。這意味著它可能因多種原因而發生變化,包括系統時鐘甚至閏秒的變化。
因此,簡而言之,如果您需要高精度,則應避免使用 currentTimeMillis() 方法來計算經過時間。
現在讓我們看看另一種計算經過時間的方法。我們將首先注意到該示例,然后對其進行評論。
長啟動=系統。納米時間();// 一段時間過去了long end = System . 納米時間();long elapsedTime =結束-開始;
如您所見,代碼看起來很像前面示例中的代碼。唯一的區別是現在我們使用的是“nanoTime()”方法而不是“currentTimeMillis()”。那么,這兩種方法有什么區別呢?
第一個顯著的區別是“nanoTime()”,顧名思義,以納秒為單位返回結果。根據文檔,我們可以看到其返回值的來源是 JVM(Java 虛擬機)的高分辨率時間源。
該文件還強調了其他一些重要事實。第一個是您只能使用這種方法來計算經過的時間。換句話說,方法返回的值沒有意義,因為它與任何時間系統都沒有關系。
使用此方法時要記住的另一件重要事情是,雖然它提供納秒級精度,但不一定提供納秒級分辨率。這里的“分辨率”是指更新值的頻率。
最后,請記住該方法不是線程安全的。
現在,我們將通過介紹 Apache Commons Lang API 提供的 StopWatch 類將重點轉向庫。讓我們看一個簡單的例子:
秒表手表=新的秒表();
觀看。開始();// 調用你想要對
watch進行基準測試的方法。停止();長結果=觀看。獲取時間();
從上面的代碼可以看出,StopWatch 的使用非常簡單。您可以通過調用“start()”方法開始計時。然后你做你需要執行的任何任務。之后,您就可以調用“stop()”,然后調用“getTime()”,它將返回以毫秒為單位的經過時間。請記住,此類呈現時間耦合。例如,這意味著您不能停止尚未啟動的時鐘或啟動已經運行的時鐘。嘗試這樣做將導致拋出異常。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習