Spring:时间统计工具StopWatch

一、介绍

在Spring框架中,StopWatch类通常用于测量代码块的执行时间。您可以使用StopWatch来计算方法调用或代码块的执行时间,以便进行性能分析和优化。

二、使用

您可以按照以下步骤在Spring应用程序中使用StopWatch:

1、导入相关的Spring包

如果你正在使用Spring Boot,那么StopWatch应该已经包含在Spring Boot的starter中。如果你不是使用Spring Boot,你可能需要手动添加Spring Context的依赖。

import org.springframework.util.StopWatch;

2、创建StopWatch实例和开始计时

在需要测量时间的代码块中创建StopWatch实例并开始计时

//使用new StopWatch()来创建一个新的StopWatch实例。
StopWatch stopWatch = new StopWatch();
//使用start()方法开始计时。通常,你会在开始执行你想要测量的代码块之前调用这个方法。
stopWatch.start();
// 执行需要测量时间的代码块

3、停止计时

使用stop()方法停止计时。这个方法会停止当前的计时器,并将此次测量的时间添加到总时间中

stopWatch.stop();

4、获取时间

你可以使用getTotalTimeMillis()或getTotalTimeSeconds()方法来获取总时间,或者使用getLastTaskTimeMillis()或getLastTaskTimeSeconds()方法来获取最后一次任务的时间。

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

5、获取任务详情

StopWatch还提供了getTaskInfo()方法,用于获取每个任务的信息,包括任务名称和执行时间。

6、分阶段计时

允许在同一个StopWatch实例中开始多个“任务”,每个任务代表一个独立的计时期间,这样可以计算出不同阶段的耗时。

7、获取总耗时与各阶段耗时

提供了获取所有任务累计运行时间和单个任务运行时间的方法。

三、案例

package chatpter02;

import org.springframework.util.StopWatch;

import java.util.Arrays;

public class TestStopWatch {
    public static void main(String[] args) {
        StopWatch stopWatch = new StopWatch();

        // 开始计时
        stopWatch.start("task1");
        // 执行一些任务...
        try {
            Thread.sleep(1000); // 模拟耗时任务
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        // 停止计时
        stopWatch.stop();

        // 开始另一个任务的计时
        stopWatch.start("task2");
        // 执行另一个任务...
        try {
            Thread.sleep(500); // 模拟另一个耗时任务
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        // 停止计时
        stopWatch.stop();

        // 输出总时间和每个任务的时间
        System.out.println("Total time: " + stopWatch.getTotalTimeMillis() + " ms");
        System.out.println("Task 2 time: " + stopWatch.getLastTaskTimeMillis() + " ms");
        //System.out.println("Task 2 time: " + stopWatch.get("task2") + " ms");
        // 获取任务信息
        Arrays.stream(stopWatch.getTaskInfo()).forEach(taskInfo -> {
            System.out.println("Task name: " + taskInfo.getTaskName());
            System.out.println("Task time: " + taskInfo.getTimeMillis());
        });
    }
    }

结果:
在这里插入图片描述

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玉成226

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值