Spring計(jì)時(shí)器StopWatch的具體使用
StopWatch介紹
StopWatch類是Spring框架中用于測(cè)量代碼執(zhí)行時(shí)間的工具類,它提供了一系列屬性來(lái)記錄監(jiān)測(cè)信息。
本文基于spring-boot-starter-web:2.2.2RELEASE版本。
源碼:
public class StopWatch {
? ? private final String id;
? ? private boolean keepTaskList = true;
? ? private final List<StopWatch.TaskInfo> taskList = new LinkedList<>();
? ? private long startTimeMillis;
? ? @Nullable
? ? private String currentTaskName;
? ? @Nullable
? ? private StopWatch.TaskInfo lastTaskInfo;
? ? private int taskCount;
? ? private long totalTimeMillis;
?? ?......方法略
?? ?public static final class TaskInfo {
?? ??? ?private final String taskName;
?? ??? ?private final long timeNanos;
?? ?}
}StopWatch屬性詳解
| 屬性 | 描述 | 
|---|---|
| id | 表示該StopWatch對(duì)象的唯一標(biāo)識(shí)符,可以通過構(gòu)造函數(shù)傳入。 | 
| keepTaskList | 表示是否保留所有記錄的監(jiān)測(cè)任務(wù),,默認(rèn)為true。如果該值為true,則程序可以通過getTaskInfo()方法獲取所有監(jiān)測(cè)任務(wù)的詳細(xì)信息,否則僅可以獲取最后一次監(jiān)測(cè)任務(wù)的詳細(xì)信息。 | 
| taskList | 用于記錄所有的監(jiān)測(cè)任務(wù)信息,只有keepTaskList屬性值為true時(shí)才記錄任務(wù)信息,該值在stop()方法調(diào)用時(shí)添加一條任務(wù)信息。 | 
| currentTaskName | 表示當(dāng)前正在執(zhí)行的監(jiān)測(cè)任務(wù)名稱,該值在start()方法調(diào)用時(shí)設(shè)置。 | 
| lastTaskInfo | 表示最后一次執(zhí)行的監(jiān)測(cè)任務(wù)的詳細(xì)信息,包括任務(wù)名稱、執(zhí)行時(shí)間等,該值在stop()方法調(diào)用時(shí)設(shè)置。 | 
| taskCount | 表示執(zhí)行的監(jiān)測(cè)任務(wù)數(shù)目,該值在stop()方法調(diào)用時(shí)值+1。 | 
| totalTimeMillis | 表示該StopWatch對(duì)象記錄的所有監(jiān)測(cè)任務(wù)的總執(zhí)行時(shí)間,單位為毫秒,該值在stop()方法調(diào)用時(shí)值+當(dāng)前任務(wù)的執(zhí)行時(shí)間。 | 
| TaskInfo.taskName | 任務(wù)名稱。 | 
| TaskInfo.timeNanos | 任務(wù)執(zhí)行時(shí)間。 | 
StopWatch方法詳解
| 方法 | 描述 | 
|---|---|
| void setKeepTaskList(boolean keepTaskList) | 設(shè)置是否保留所有記錄的監(jiān)測(cè)任務(wù),默認(rèn)為true。如果該值為true,則程序可以通過getTaskInfo()方法獲取所有監(jiān)測(cè)任務(wù)的詳細(xì)信息。 | 
| void start() | 開始一個(gè)新的監(jiān)測(cè)任務(wù),可設(shè)置任務(wù)名稱。記錄當(dāng)前時(shí)間和任務(wù)名稱。 | 
| void stop() | 結(jié)束當(dāng)前監(jiān)測(cè)任務(wù)。記錄任務(wù)執(zhí)行時(shí)間,更新總執(zhí)行時(shí)間和任務(wù)數(shù)量。 | 
| String getId() | 獲取唯一標(biāo)識(shí)符。 | 
| String currentTaskName() | 獲取當(dāng)前正在運(yùn)行的監(jiān)測(cè)任務(wù)名稱。 | 
| TaskInfo getLastTaskInfo() | 獲取最后一次執(zhí)行的監(jiān)測(cè)任務(wù)的詳細(xì)信息,包括任務(wù)名稱、開始時(shí)間、結(jié)束時(shí)間和執(zhí)行時(shí)間等。 | 
| String getLastTaskName() | 獲取最后一次執(zhí)行的監(jiān)測(cè)任務(wù)的任務(wù)名稱 | 
| long getLastTaskTimeMillis() | 獲取最后一次執(zhí)行的監(jiān)測(cè)任務(wù)的執(zhí)行時(shí)間,單位毫秒 | 
| long getLastTaskTimeNanos() | 獲取最后一次執(zhí)行的監(jiān)測(cè)任務(wù)的執(zhí)行時(shí)間,單位納秒 | 
| int getTaskCount() | 獲取已執(zhí)行的監(jiān)測(cè)任務(wù)數(shù)目 | 
| TaskInfo[] getTaskInfo() | 獲取所有監(jiān)測(cè)任務(wù)信息,僅在keepTaskList屬性為true時(shí)有效。 | 
| double getTotalTimeSeconds() | 獲取所有監(jiān)測(cè)任務(wù)的總執(zhí)行時(shí)間,單位為秒。 | 
| long getTotalTimeMillis() | 獲取所有監(jiān)測(cè)任務(wù)的總執(zhí)行時(shí)間,單位為毫秒。 | 
| long getTotalTimeNanos() | 獲取所有監(jiān)測(cè)任務(wù)的總執(zhí)行時(shí)間,單位為納秒。 | 
| boolean isRunning() | 判斷當(dāng)前StopWatch對(duì)象是否正在執(zhí)行監(jiān)測(cè)任務(wù)。 | 
| String shortSummary() | 以字符串形式輸出所有監(jiān)測(cè)任務(wù)的簡(jiǎn)要信息,包括任務(wù)數(shù)目和總執(zhí)行時(shí)間。 | 
| String prettyPrint() | 以字符串形式輸出所有監(jiān)測(cè)任務(wù)的執(zhí)行時(shí)間和詳細(xì)信息。 | 
StopWatch使用示例
? ? public static void main(String[] args) throws InterruptedException {
? ? ? ? StopWatch stopWatch = new StopWatch();
? ? ? ? stopWatch.start("task1");
? ? ? ? System.out.println("當(dāng)前任務(wù)名稱:"+stopWatch.currentTaskName());
? ? ? ? Thread.sleep(1000);
? ? ? ? stopWatch.stop();
? ? ? ? System.out.println("task1耗時(shí)毫秒:"+stopWatch.getLastTaskTimeMillis());
? ? ? ? stopWatch.start("task2");
? ? ? ? System.out.println("當(dāng)前任務(wù)名稱:"+stopWatch.currentTaskName());
? ? ? ? Thread.sleep(2000);
? ? ? ? stopWatch.stop();
? ? ? ? System.out.println("task2耗時(shí)毫秒:"+stopWatch.getLastTaskTimeMillis());
? ? ? ? System.out.println("總?cè)蝿?wù)數(shù):"+stopWatch.getTaskCount());
? ? ? ? System.out.println("總耗時(shí)毫秒:"+stopWatch.getTotalTimeMillis());
? ? ? ? System.out.println("所有任務(wù)簡(jiǎn)要信息:\n"+stopWatch.shortSummary());
? ? ? ? System.out.println("所有任務(wù)詳細(xì)信息:\n"+stopWatch.prettyPrint());
? ? }輸出:
當(dāng)前任務(wù)名稱:task1
task1耗時(shí)毫秒:1013
當(dāng)前任務(wù)名稱:task2
task2耗時(shí)毫秒:2014
總?cè)蝿?wù)數(shù):2
總耗時(shí)毫秒:3027
所有任務(wù)簡(jiǎn)要信息:
StopWatch '': running time = 3027555400 ns
所有任務(wù)詳細(xì)信息:
StopWatch '': running time = 3027555400 ns
---------------------------------------------
ns % Task name
---------------------------------------------
1013462900 033% task1
2014092500 067% task2
到此這篇關(guān)于Spring計(jì)時(shí)器StopWatch的具體使用的文章就介紹到這了,更多相關(guān)Spring StopWatch內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
 springboot使JUL實(shí)現(xiàn)日志管理功能
這篇文章主要介紹了springboot使JUL實(shí)現(xiàn)日志管理功能,本文分步驟給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09
 Mybatis插入時(shí)返回自增主鍵方式(selectKey和useGeneratedKeys)
這篇文章主要介紹了Mybatis插入時(shí)返回自增主鍵方式(selectKey和useGeneratedKeys),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
 MyBatis中調(diào)用存儲(chǔ)過程和函數(shù)的實(shí)現(xiàn)示例
在MyBatis中調(diào)用存儲(chǔ)過程和函數(shù)是一個(gè)相對(duì)高級(jí)的特性,本文主要介紹了MyBatis中調(diào)用存儲(chǔ)過程和函數(shù)的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-07-07
 Java獲取接口的所有實(shí)現(xiàn)類方法總結(jié)示例
這篇文章主要給大家介紹了關(guān)于Java獲取接口的所有實(shí)現(xiàn)類方法的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2024-06-06

