it编程 > 编程语言 > Java

Java使用StopWatch输出执行耗时的方法详解

5人参与 2025-07-26 Java

前言

在性能调优和调试过程中,了解代码执行的时间非常重要。spring 框架提供了一个名为 stopwatch 的工具类,用于简化和标准化代码执行时间的测量。本文将详细介绍如何使用 stopwatch 来输出代码执行的耗时。

一、什么是 stopwatch

stopwatch 是 spring 框架提供的一个轻量级工具类,用于测量代码执行时间。它允许我们方便地启动、停止计时,并输出每个任务的执行时间以及总时间。

二、stopwatch 的常用方法

2.1 创建 stopwatch 实例

可以通过无参构造函数创建一个 stopwatch 实例:

import org.springframework.util.stopwatch;
stopwatch stopwatch = new stopwatch();

或者使用带名称的构造函数:

stopwatch stopwatch = new stopwatch("mystopwatch");

2.2 启动和停止计时

使用 start 方法启动计时:

stopwatch.start();

可以为每个任务指定名称:

stopwatch.start("task1");

使用 stop 方法停止计时:

stopwatch.stop();

2.3 获取计时结果

获取每个任务的详细信息:

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");
}

获取总时间:

system.out.println("total time: " + stopwatch.gettotaltimemillis() + " ms");

2.4 输出计时结果

stopwatch 提供了多种格式化输出方法:

system.out.println(stopwatch.prettyprint());

或者:

system.out.println(stopwatch.shortsummary());

三、示例代码

以下是一个完整的示例代码,展示了如何使用 stopwatch 测量多个任务的执行时间:

import org.springframework.util.stopwatch;

public class stopwatchexample {

    public static void main(string[] args) throws interruptedexception {
        stopwatch stopwatch = new stopwatch("examplestopwatch");

        stopwatch.start("task1");
        // 模拟任务1的执行时间
        thread.sleep(500);
        stopwatch.stop();

        stopwatch.start("task2");
        // 模拟任务2的执行时间
        thread.sleep(300);
        stopwatch.stop();

        stopwatch.start("task3");
        // 模拟任务3的执行时间
        thread.sleep(700);
        stopwatch.stop();

        // 输出每个任务的详细信息
        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");
        }

        // 输出总时间
        system.out.println("total time: " + stopwatch.gettotaltimemillis() + " ms");

        // 输出格式化结果
        system.out.println(stopwatch.prettyprint());
    }
}

运行结果示例

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

四、实践应用

4.1 复杂业务逻辑的性能分析

在处理复杂的业务逻辑时,使用 stopwatch 可以帮助我们找到性能瓶颈。以下是一个实际应用示例:

public void complexbusinesslogic() {
    stopwatch stopwatch = new stopwatch("complexbusinesslogic");

    stopwatch.start("initialization");
    // 初始化操作
    initialize();
    stopwatch.stop();

    stopwatch.start("dataprocessing");
    // 数据处理操作
    processdata();
    stopwatch.stop();

    stopwatch.start("finalization");
    // 最终操作
    finalizeprocess();
    stopwatch.stop();

    system.out.println(stopwatch.prettyprint());
}

private void initialize() {
    // 模拟初始化时间
    try { thread.sleep(200); } catch (interruptedexception e) { e.printstacktrace(); }
}

private void processdata() {
    // 模拟数据处理时间
    try { thread.sleep(500); } catch (interruptedexception e) { e.printstacktrace(); }
}

private void finalizeprocess() {
    // 模拟最终处理时间
    try { thread.sleep(300); } catch (interruptedexception e) { e.printstacktrace(); }
}

4.2 api 调用耗时分析

在进行 api 调用时,使用 stopwatch 可以精确测量每个 api 调用的耗时,帮助优化接口性能。

public void callapis() {
    stopwatch stopwatch = new stopwatch("apicalls");

    stopwatch.start("api1");
    // 调用第一个api
    callapi1();
    stopwatch.stop();

    stopwatch.start("api2");
    // 调用第二个api
    callapi2();
    stopwatch.stop();

    system.out.println(stopwatch.prettyprint());
}

private void callapi1() {
    // 模拟api调用时间
    try { thread.sleep(400); } catch (interruptedexception e) { e.printstacktrace(); }
}

private void callapi2() {
    // 模拟api调用时间
    try { thread.sleep(600); } catch (interruptedexception e) { e.printstacktrace(); }
}

五、总结

通过本文的介绍,我们详细讲解了如何使用 stopwatch 类测量代码执行时间。stopwatch 提供了简单而强大的功能,帮助我们精确分析代码的性能瓶颈,优化程序效率。希望本文能帮助您更好地理解和应用 stopwatch,在实际开发中提高代码性能和质量。

(0)

您想发表意见!!点此发布评论

推荐阅读

Java快速转C#的简明教程

07-26

Java应对高并发的思路和最佳实践

07-26

Java Thread中join方法使用举例详解

07-26

springboot使用外置的Servlet容器步骤

07-26

Spring AI使用tool Calling和MCP的示例详解

07-26

vscode 登录ssh如何记住密码直接登录设置

07-26

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论