一、介绍
在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());
});
}
}
结果: