欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java使用StopWatch輸出執(zhí)行耗時(shí)的方法詳解

 更新時(shí)間:2025年07月26日 09:43:39   作者:xx155802862xx  
StopWatch是一個(gè)簡單而強(qiáng)大的工具,可以幫助我們測量代碼執(zhí)行時(shí)間,從而優(yōu)化性能,這篇文章主要介紹了Java使用StopWatch輸出執(zhí)行耗時(shí)的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

在性能調(diào)優(yōu)和調(diào)試過程中,了解代碼執(zhí)行的時(shí)間非常重要。Spring 框架提供了一個(gè)名為 StopWatch 的工具類,用于簡化和標(biāo)準(zhǔn)化代碼執(zhí)行時(shí)間的測量。本文將詳細(xì)介紹如何使用 StopWatch 來輸出代碼執(zhí)行的耗時(shí)。

一、什么是 StopWatch

StopWatch 是 Spring 框架提供的一個(gè)輕量級工具類,用于測量代碼執(zhí)行時(shí)間。它允許我們方便地啟動、停止計(jì)時(shí),并輸出每個(gè)任務(wù)的執(zhí)行時(shí)間以及總時(shí)間。

二、StopWatch 的常用方法

2.1 創(chuàng)建 StopWatch 實(shí)例

可以通過無參構(gòu)造函數(shù)創(chuàng)建一個(gè) StopWatch 實(shí)例:

import org.springframework.util.StopWatch;
StopWatch stopWatch = new StopWatch();

或者使用帶名稱的構(gòu)造函數(shù):

StopWatch stopWatch = new StopWatch("MyStopWatch");

2.2 啟動和停止計(jì)時(shí)

使用 start 方法啟動計(jì)時(shí):

stopWatch.start();

可以為每個(gè)任務(wù)指定名稱:

stopWatch.start("Task1");

使用 stop 方法停止計(jì)時(shí):

stopWatch.stop();

2.3 獲取計(jì)時(shí)結(jié)果

獲取每個(gè)任務(wù)的詳細(xì)信息:

StopWatch.TaskInfo[] taskInfos = stopWatch.getTaskInfo();
for (StopWatch.TaskInfo taskInfo : taskInfos) {
    System.out.println("Task name: " + taskInfo.getTaskName());
    System.out.println("Time taken: " + taskInfo.getTimeMillis() + " ms");
}

獲取總時(shí)間:

System.out.println("Total time: " + stopWatch.getTotalTimeMillis() + " ms");

2.4 輸出計(jì)時(shí)結(jié)果

StopWatch 提供了多種格式化輸出方法:

System.out.println(stopWatch.prettyPrint());

或者:

System.out.println(stopWatch.shortSummary());

三、示例代碼

以下是一個(gè)完整的示例代碼,展示了如何使用 StopWatch 測量多個(gè)任務(wù)的執(zhí)行時(shí)間:

import org.springframework.util.StopWatch;

public class StopWatchExample {

    public static void main(String[] args) throws InterruptedException {
        StopWatch stopWatch = new StopWatch("ExampleStopWatch");

        stopWatch.start("Task1");
        // 模擬任務(wù)1的執(zhí)行時(shí)間
        Thread.sleep(500);
        stopWatch.stop();

        stopWatch.start("Task2");
        // 模擬任務(wù)2的執(zhí)行時(shí)間
        Thread.sleep(300);
        stopWatch.stop();

        stopWatch.start("Task3");
        // 模擬任務(wù)3的執(zhí)行時(shí)間
        Thread.sleep(700);
        stopWatch.stop();

        // 輸出每個(gè)任務(wù)的詳細(xì)信息
        StopWatch.TaskInfo[] taskInfos = stopWatch.getTaskInfo();
        for (StopWatch.TaskInfo taskInfo : taskInfos) {
            System.out.println("Task name: " + taskInfo.getTaskName());
            System.out.println("Time taken: " + taskInfo.getTimeMillis() + " ms");
        }

        // 輸出總時(shí)間
        System.out.println("Total time: " + stopWatch.getTotalTimeMillis() + " ms");

        // 輸出格式化結(jié)果
        System.out.println(stopWatch.prettyPrint());
    }
}

運(yùn)行結(jié)果示例

Task name: Task1
Time taken: 500 ms
Task name: Task2
Time taken: 300 ms
Task name: Task3
Time taken: 700 ms
Total time: 1500 ms

StopWatch 'ExampleStopWatch': running time (millis) = 1500
-----------------------------------------
ms     %     Task name
-----------------------------------------
00500  033%  Task1
00300  020%  Task2
00700  047%  Task3

四、實(shí)踐應(yīng)用

4.1 復(fù)雜業(yè)務(wù)邏輯的性能分析

在處理復(fù)雜的業(yè)務(wù)邏輯時(shí),使用 StopWatch 可以幫助我們找到性能瓶頸。以下是一個(gè)實(shí)際應(yīng)用示例:

public void complexBusinessLogic() {
    StopWatch stopWatch = new StopWatch("ComplexBusinessLogic");

    stopWatch.start("Initialization");
    // 初始化操作
    initialize();
    stopWatch.stop();

    stopWatch.start("DataProcessing");
    // 數(shù)據(jù)處理操作
    processData();
    stopWatch.stop();

    stopWatch.start("Finalization");
    // 最終操作
    finalizeProcess();
    stopWatch.stop();

    System.out.println(stopWatch.prettyPrint());
}

private void initialize() {
    // 模擬初始化時(shí)間
    try { Thread.sleep(200); } catch (InterruptedException e) { e.printStackTrace(); }
}

private void processData() {
    // 模擬數(shù)據(jù)處理時(shí)間
    try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); }
}

private void finalizeProcess() {
    // 模擬最終處理時(shí)間
    try { Thread.sleep(300); } catch (InterruptedException e) { e.printStackTrace(); }
}

4.2 API 調(diào)用耗時(shí)分析

在進(jìn)行 API 調(diào)用時(shí),使用 StopWatch 可以精確測量每個(gè) API 調(diào)用的耗時(shí),幫助優(yōu)化接口性能。

public void callApis() {
    StopWatch stopWatch = new StopWatch("APICalls");

    stopWatch.start("API1");
    // 調(diào)用第一個(gè)API
    callApi1();
    stopWatch.stop();

    stopWatch.start("API2");
    // 調(diào)用第二個(gè)API
    callApi2();
    stopWatch.stop();

    System.out.println(stopWatch.prettyPrint());
}

private void callApi1() {
    // 模擬API調(diào)用時(shí)間
    try { Thread.sleep(400); } catch (InterruptedException e) { e.printStackTrace(); }
}

private void callApi2() {
    // 模擬API調(diào)用時(shí)間
    try { Thread.sleep(600); } catch (InterruptedException e) { e.printStackTrace(); }
}

五、總結(jié)

通過本文的介紹,我們詳細(xì)講解了如何使用 StopWatch 類測量代碼執(zhí)行時(shí)間。StopWatch 提供了簡單而強(qiáng)大的功能,幫助我們精確分析代碼的性能瓶頸,優(yōu)化程序效率。希望本文能幫助您更好地理解和應(yīng)用 StopWatch,在實(shí)際開發(fā)中提高代碼性能和質(zhì)量。

相關(guān)文章

  • Spring Cloud Gateway不同頻率限流的解決方案(每分鐘,每小時(shí),每天)

    Spring Cloud Gateway不同頻率限流的解決方案(每分鐘,每小時(shí),每天)

    SpringCloud Gateway 是 Spring Cloud 的一個(gè)全新項(xiàng)目,它旨在為微服務(wù)架構(gòu)提供一種簡單有效的統(tǒng)一的 API 路由管理方式。這篇文章主要介紹了Spring Cloud Gateway不同頻率限流(每分鐘,每小時(shí),每天),需要的朋友可以參考下
    2020-10-10
  • idea中的update?project按鈕使用

    idea中的update?project按鈕使用

    這篇文章主要介紹了idea中的update?project按鈕使用方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • 一文帶你了解Java中的ForkJoin

    一文帶你了解Java中的ForkJoin

    這篇文章主要介紹了一文帶你了解Java中的ForkJoin,F(xiàn)orkJoinTask本身的依賴關(guān)系并不復(fù)雜,它與異步任務(wù)計(jì)算FutureTask一樣均實(shí)現(xiàn)了Future接口,下文更多相關(guān)資料,需要的小伙伴可以參考一下
    2022-04-04
  • SpringBoot多租戶配置與實(shí)現(xiàn)示例

    SpringBoot多租戶配置與實(shí)現(xiàn)示例

    本文詳細(xì)介紹了在SpringBoot中實(shí)現(xiàn)多租戶架構(gòu)的方法和步驟,包括配置數(shù)據(jù)源、Hibernate攔截器、租戶解析器等,以共享數(shù)據(jù)庫、共享數(shù)據(jù)表的方式,確保數(shù)據(jù)隔離和安全性,感興趣的可以了解一下
    2024-09-09
  • 解決Maven項(xiàng)目加載spring bean的配置xml文件會提示找不到問題

    解決Maven項(xiàng)目加載spring bean的配置xml文件會提示找不到問題

    這篇文章主要介紹了解決Maven項(xiàng)目加載spring bean的配置xml文件會提示找不到問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 淺談 JDBC 元數(shù)據(jù)

    淺談 JDBC 元數(shù)據(jù)

    這篇文章主要介紹了JDBC元數(shù)據(jù)的相關(guān)內(nèi)容,涉及一些獲取數(shù)據(jù)源各種信息的方法,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-09-09
  • springboot2.x集成swagger的方法示例

    springboot2.x集成swagger的方法示例

    這篇文章主要介紹了springboot2.x集成swagger的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • java開發(fā)RocketMQ生產(chǎn)者高可用示例詳解

    java開發(fā)RocketMQ生產(chǎn)者高可用示例詳解

    這篇文章主要為大家介紹了java開發(fā)RocketMQ生產(chǎn)者高可用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • java控制臺輸出圖書館管理系統(tǒng)

    java控制臺輸出圖書館管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了java控制臺輸出圖書館管理系統(tǒng),只用java代碼不用數(shù)據(jù)庫和GUI等,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • SpringBoot通過計(jì)劃任務(wù)發(fā)送郵件提醒的代碼詳解

    SpringBoot通過計(jì)劃任務(wù)發(fā)送郵件提醒的代碼詳解

    在實(shí)際線上項(xiàng)目中,有不斷接受到推送方發(fā)來的數(shù)據(jù)場景,而且是不間斷的發(fā)送,如果忽然間斷了,應(yīng)該是出問題了,需要及時(shí)檢查原因,這種情況比較適合用計(jì)劃任務(wù)做檢查判斷,出問題發(fā)郵件提醒,本文給大家介紹了SpringBoot通過計(jì)劃任務(wù)發(fā)送郵件提醒,需要的朋友可以參考下
    2024-11-11

最新評論