详细分析Java中的StopWatch基本知识(附Demo)
目录
- 前言
- 1. 基本知识
- 2. Demo
前言
对于Java的基本知识推荐阅读:
- java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)
- 【Java项目】实战CRUD的功能整理(持续更新)
1. 基本知识
StopWatch 是 Spring Framework 提供的一个简单计时器类,用来测量代码的执行时间
它可以用来跟踪某个任务或一系列任务的执行时间,常用于性能调优或监控任务的耗时
-
创建 StopWatch 对象:可以使用无参构造器或指定一个唯一标识符来创建一个 StopWatch 实例
-
开始计时:通过 start() 方法开始一个计时。可以给每个计时任务指定一个任务名,方便后续分析
-
停止计时:使用 stop() 方法停止当前任务的计时
-
获取任务耗时:通过 getTotalTimeMillis() 可以获取所有任务的总耗时,或者通过 getLastTaskTimeMillis() 获取上一个任务的耗时
-
任务信息:可以获取每个任务的耗时、百分比以及名称等详细信息
-
重置计时器: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");}
}
截图如下: