Springboot之如何統(tǒng)計(jì)代碼執(zhí)行耗時(shí)時(shí)間
前言
近日群里有萌新提到關(guān)于統(tǒng)計(jì)代碼執(zhí)行時(shí)間的事:
開始 System.currentTimeMillis() 減去 結(jié)束 System.currentTimeMillis() 等于 耗時(shí)
其實(shí)我個(gè)人感覺OK的,就這樣就蠻好的,很多項(xiàng)目都是這樣用的。
簡(jiǎn)簡(jiǎn)單單的挺好。
正文
① StopWatch
第一種玩法,spring util 里面提供的 StopWatch
示例代碼:
StopWatch stopWatch = new StopWatch(); stopWatch.start(); //doInsert(); //執(zhí)行業(yè)務(wù)等 stopWatch.stop(); System.out.println(stopWatch.getTotalTimeMillis());
效果:
② System.nanoTime()
第二種玩法 System.nanoTime()
先不著急看怎么用, 我們看完第一種 StopWatch 的時(shí)候, 有沒有小伙伴的思維散發(fā)夠的,想著這spring 封裝的統(tǒng)計(jì)耗時(shí),自己是怎么實(shí)現(xiàn)的?
題外話:
一定要養(yǎng)成這種散發(fā)的思維, 很多兄弟朋友都跟我反饋過一些話題,就是說,項(xiàng)目里面沒啥東西可學(xué)。
其實(shí),這個(gè)很正常, 工作過程不是教導(dǎo)過程,你要自己有 縱向 挖掘 、橫向 散發(fā)的 學(xué)習(xí)思維。
直接點(diǎn)StopWatch 的源碼看一眼, 哦,原理是用的 System.nanoTime() :
System.nanoTime() 代碼使用示例 :
long startTime = System.nanoTime(); doInsert(); //執(zhí)行業(yè)務(wù) long endTime = System.nanoTime(); System.out.println((endTime - startTime));
效果 :
③ new Date ()
第三種玩法 ,平時(shí)偶爾也看到別人這么寫 new Date
示例代碼:
Date startDate = new Date(); // doInsert(); //執(zhí)行業(yè)務(wù)等 Date endDate = new Date(); System.out.println((endDate.getTime() - startDate.getTime()));
效果:
④ System.currentTimeMillis()
省略
ps: StopWatch 其實(shí)不僅僅是封了一下耗時(shí)統(tǒng)計(jì),這樣也太。。了 。
里面其實(shí)封裝了蠻多其他關(guān)于時(shí)間統(tǒng)計(jì)的函數(shù)(感興趣的可以單獨(dú)去研究研究,特別是參考作者的封裝思路 ):
void start
(“任務(wù)名稱”):開始一個(gè)任務(wù)名稱的計(jì)時(shí)void stop()
:停止當(dāng)前任務(wù)的計(jì)時(shí)boolean isRunning()
:是否正在計(jì)時(shí)某任務(wù)long getTotalTimeMillis()
:所有任務(wù)的總體執(zhí)行時(shí)間(毫秒單位)double getTotalTimeSeconds()
:所有任務(wù)的總時(shí)間(以秒為單位)long getLastTaskTimeMillis()
:上一個(gè)任務(wù)的耗時(shí)(毫秒單位)int getTaskCount()
:定時(shí)任務(wù)的數(shù)量String prettyPrint()
:優(yōu)美地打印所有任務(wù)的詳細(xì)耗時(shí)情況StopWatch.TaskInfo[] getTaskInfo()
:包含任務(wù)名稱和任務(wù)耗時(shí)的實(shí)體類數(shù)組
總結(jié)
好了,該篇就到這里了~
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java微信公眾平臺(tái)開發(fā)(9) 關(guān)鍵字回復(fù)以及客服接口實(shí)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了Java微信公眾平臺(tái)開發(fā)第九步,關(guān)鍵字回復(fù)以及客服接口實(shí)現(xiàn),以及遇到該公眾號(hào)暫時(shí)無法提供服務(wù)的解決方案,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04Spring Boot監(jiān)聽Redis Key失效事件實(shí)現(xiàn)定時(shí)任務(wù)的示例
這篇文章主要介紹了Spring Boot監(jiān)聽Redis Key失效事件實(shí)現(xiàn)定時(shí)任務(wù)的示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04JDK自帶的序列化方式優(yōu)缺點(diǎn)及實(shí)現(xiàn)原理面試精講
這篇文章主要為大家介紹了JDK自帶的序列化方式優(yōu)缺點(diǎn)及實(shí)現(xiàn)原理面試精講,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10如何實(shí)現(xiàn)廣告彈窗觸達(dá)頻率的控制?
這篇文章主要介紹了如何實(shí)現(xiàn)廣告彈窗觸達(dá)頻率的控制,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04SpringBoot常用計(jì)量與bean屬性校驗(yàn)和進(jìn)制數(shù)據(jù)轉(zhuǎn)換規(guī)則全面分析
這篇文章主要介紹了SpringBoot常用計(jì)量、bean屬性校驗(yàn)與進(jìn)制數(shù)據(jù)轉(zhuǎn)換規(guī)則,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-10-10BeanUtils.copyProperties()屬性名相同但是類型不同問題
這篇文章主要介紹了BeanUtils.copyProperties()屬性名相同但是類型不同問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-09-09MyBatis中獲取Mysql數(shù)據(jù)庫插入記錄的主鍵值的實(shí)現(xiàn)
本文主要介紹了MyBatis中獲取Mysql數(shù)據(jù)庫插入記錄的主鍵值的實(shí)現(xiàn),包含了三種實(shí)現(xiàn)方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-06-06