Spring計(jì)時(shí)器StopWatch的具體使用
StopWatch介紹
StopWatch類是Spring框架中用于測量代碼執(zhí)行時(shí)間的工具類,它提供了一系列屬性來記錄監(jiān)測信息。
本文基于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)測任務(wù),,默認(rèn)為true。如果該值為true,則程序可以通過getTaskInfo()方法獲取所有監(jiān)測任務(wù)的詳細(xì)信息,否則僅可以獲取最后一次監(jiān)測任務(wù)的詳細(xì)信息。 |
| taskList | 用于記錄所有的監(jiān)測任務(wù)信息,只有keepTaskList屬性值為true時(shí)才記錄任務(wù)信息,該值在stop()方法調(diào)用時(shí)添加一條任務(wù)信息。 |
| currentTaskName | 表示當(dāng)前正在執(zhí)行的監(jiān)測任務(wù)名稱,該值在start()方法調(diào)用時(shí)設(shè)置。 |
| lastTaskInfo | 表示最后一次執(zhí)行的監(jiān)測任務(wù)的詳細(xì)信息,包括任務(wù)名稱、執(zhí)行時(shí)間等,該值在stop()方法調(diào)用時(shí)設(shè)置。 |
| taskCount | 表示執(zhí)行的監(jiān)測任務(wù)數(shù)目,該值在stop()方法調(diào)用時(shí)值+1。 |
| totalTimeMillis | 表示該StopWatch對(duì)象記錄的所有監(jiān)測任務(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)測任務(wù),默認(rèn)為true。如果該值為true,則程序可以通過getTaskInfo()方法獲取所有監(jiān)測任務(wù)的詳細(xì)信息。 |
| void start() | 開始一個(gè)新的監(jiān)測任務(wù),可設(shè)置任務(wù)名稱。記錄當(dāng)前時(shí)間和任務(wù)名稱。 |
| void stop() | 結(jié)束當(dāng)前監(jiān)測任務(wù)。記錄任務(wù)執(zhí)行時(shí)間,更新總執(zhí)行時(shí)間和任務(wù)數(shù)量。 |
| String getId() | 獲取唯一標(biāo)識(shí)符。 |
| String currentTaskName() | 獲取當(dāng)前正在運(yùn)行的監(jiān)測任務(wù)名稱。 |
| TaskInfo getLastTaskInfo() | 獲取最后一次執(zhí)行的監(jiān)測任務(wù)的詳細(xì)信息,包括任務(wù)名稱、開始時(shí)間、結(jié)束時(shí)間和執(zhí)行時(shí)間等。 |
| String getLastTaskName() | 獲取最后一次執(zhí)行的監(jiān)測任務(wù)的任務(wù)名稱 |
| long getLastTaskTimeMillis() | 獲取最后一次執(zhí)行的監(jiān)測任務(wù)的執(zhí)行時(shí)間,單位毫秒 |
| long getLastTaskTimeNanos() | 獲取最后一次執(zhí)行的監(jiān)測任務(wù)的執(zhí)行時(shí)間,單位納秒 |
| int getTaskCount() | 獲取已執(zhí)行的監(jiān)測任務(wù)數(shù)目 |
| TaskInfo[] getTaskInfo() | 獲取所有監(jiān)測任務(wù)信息,僅在keepTaskList屬性為true時(shí)有效。 |
| double getTotalTimeSeconds() | 獲取所有監(jiān)測任務(wù)的總執(zhí)行時(shí)間,單位為秒。 |
| long getTotalTimeMillis() | 獲取所有監(jiān)測任務(wù)的總執(zhí)行時(shí)間,單位為毫秒。 |
| long getTotalTimeNanos() | 獲取所有監(jiān)測任務(wù)的總執(zhí)行時(shí)間,單位為納秒。 |
| boolean isRunning() | 判斷當(dāng)前StopWatch對(duì)象是否正在執(zhí)行監(jiān)測任務(wù)。 |
| String shortSummary() | 以字符串形式輸出所有監(jiān)測任務(wù)的簡要信息,包括任務(wù)數(shù)目和總執(zhí)行時(shí)間。 |
| String prettyPrint() | 以字符串形式輸出所有監(jiān)測任務(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ù)簡要信息:\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ù)簡要信息:
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)文章
Java實(shí)現(xiàn)在Word文檔中添加文本水印和圖片水印的操作指南
在當(dāng)今數(shù)字時(shí)代,文檔的自動(dòng)化處理與安全防護(hù)變得尤為重要,無論是為了保護(hù)版權(quán)、推廣品牌,還是為了在文檔中加入特定的標(biāo)識(shí),為Word文檔添加水印都是一種常見且高效的手段,本文將為您詳細(xì)介紹如何利用Java輕松實(shí)現(xiàn)在Word文檔中添加文本水印和圖像水印的功能2025-08-08
使用maven如何將項(xiàng)目中的test代碼打包進(jìn)jar中
使用SpringAI整合Ollama實(shí)現(xiàn)工具鏈調(diào)用功能
IDEA創(chuàng)建Spring項(xiàng)目無法選擇Java8的問題及解決
聊聊ResourceBundle和properties讀取配置文件的區(qū)別
Java數(shù)據(jù)結(jié)構(gòu)之散列表詳解
logback輸出日志屏蔽quartz的debug等級(jí)日志方式

