详细分析Java中的StopWatch基本知识(附Demo)

前言

对于Java的基本知识推荐阅读:

  1. java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)
  2. 【Java项目】实战CRUD的功能整理(持续更新)

1. 基本知识

StopWatch 是 Spring Framework 提供的一个简单计时器类,用来测量代码的执行时间

它可以用来跟踪某个任务或一系列任务的执行时间,常用于性能调优或监控任务的耗时

  1. 创建 StopWatch 对象:可以使用无参构造器或指定一个唯一标识符来创建一个 StopWatch 实例

  2. 开始计时:通过 start() 方法开始一个计时。可以给每个计时任务指定一个任务名,方便后续分析

  3. 停止计时:使用 stop() 方法停止当前任务的计时

  4. 获取任务耗时:通过 getTotalTimeMillis() 可以获取所有任务的总耗时,或者通过 getLastTaskTimeMillis() 获取上一个任务的耗时

  5. 任务信息:可以获取每个任务的耗时、百分比以及名称等详细信息

  6. 重置计时器:reset() 方法可以重置计时器,清除所有任务数据

基本的 API 使用方式
构造器

  • StopWatch():创建一个没有名称的计时器
  • StopWatch(String id):创建一个有指定唯一标识符 id 的计时器
方法功能
start()开始计时
start(String taskName开始一个命名任务的计时
stop()停止当前任务的计时
reset()重置计时器
getTotalTimeMillis()获取所有任务的总耗时(毫秒)
getLastTaskTimeMillis()获取最后一个任务的耗时(毫秒)
getTaskInfo()获取所有任务的详细信息
prettyPrint()格式化输出任务耗时信息,便于日志分析

2. Demo

import org.springframework.util.StopWatch;

public class StopWatchDemo {

    public static void main(String[] args) throws InterruptedException {
        // 创建一个 StopWatch 实例
        StopWatch stopWatch = new StopWatch();

        // 开始第一个任务计时
        stopWatch.start("任务1");  // 启动名为 "任务1" 的计时
        Thread.sleep(500);  // 模拟任务执行,休眠500毫秒
        stopWatch.stop();  // 停止第一个任务计时

        // 开始第二个任务计时
        stopWatch.start("任务2");  // 启动名为 "任务2" 的计时
        Thread.sleep(300);  // 模拟任务执行,休眠300毫秒
        stopWatch.stop();  // 停止第二个任务计时

        // 输出所有任务的详细信息,格式化展示
        System.out.println(stopWatch.prettyPrint());

        // 获取所有任务的总耗时
        System.out.println("总耗时: " + stopWatch.getTotalTimeMillis() + " ms");
    }
}

截图如下:

在这里插入图片描述

import org.springframework.util.StopWatch;

public class MultipleTaskDemo {

    public static void main(String[] args) throws InterruptedException {
        // 创建一个带有ID的StopWatch实例
        StopWatch stopWatch = new StopWatch("MyStopWatch");

        // 开始第一个任务
        stopWatch.start("任务 A");
        Thread.sleep(200); // 模拟任务 A 执行
        stopWatch.stop();  // 停止计时

        // 开始第二个任务
        stopWatch.start("任务 B");
        Thread.sleep(400); // 模拟任务 B 执行
        stopWatch.stop();  // 停止计时

        // 开始第三个任务
        stopWatch.start("任务 C");
        Thread.sleep(600); // 模拟任务 C 执行
        stopWatch.stop();  // 停止计时

        // 输出 StopWatch 的 ID 和所有任务信息
        System.out.println("StopWatch ID: " + stopWatch.getId());
        System.out.println(stopWatch.prettyPrint());

        // 遍历每个任务的信息
        for (StopWatch.TaskInfo taskInfo : stopWatch.getTaskInfo()) {
            System.out.println("任务名称: " + taskInfo.getTaskName());
            System.out.println("任务耗时: " + taskInfo.getTimeMillis() + " ms");
        }

        // 输出总耗时
        System.out.println("总耗时: " + stopWatch.getTotalTimeMillis() + " ms");
    }
}

截图如下:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

码农研究僧

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

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

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

打赏作者

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

抵扣说明:

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

余额充值