使用场景
计算某段程序的执行时间、计算每段线程所耗时间、计算方法调用的执行时间,等等。
传统方式
使用java代码实现计时功能
long startTime = System.currentTimeMillis();
// 需计算执行时间的代码段
long endTime = System.currentTimeMillis();
long totalTime = endTime -startTime;
System.err.println("该段代码执行耗时:" + totalTime + " ms");
缺点:定义过多处理时间,不好管理代码,显得冗余
使用Spring的工具类--StopWatch类
介绍
StopWatch类是Spring框架下的一个工具类,对应的包:
org.springframework.util.StopWatch
变量定义
private final String id; //记录当前task的ID
private boolean keepTaskList;
private final List<StopWatch.TaskInfo> taskList;
private long startTimeMillis; //开始时间
private boolean running; //是否正在计时
private String currentTaskName; //当前任务名称
private StopWatch.TaskInfo lastTaskInfo;
private int taskCount;
private long totalTimeMillis; //所耗时间
主要方法
start(String taskName) //计时开始,taskName可选,不填则为""
stop() //计时结束
currentTaskName() //获取当前任务名称
getTotalTimeMillis() //获取总时间
shortSummary() //获取概要任务信息
prettyPrint() //获取详细信息
使用步骤
引入spring的依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
测试Demo
public class StopWatchTest {
public static void main(String args[]) throws InterruptedException {
StopWatch stopWatch = new StopWatch("My stop Test!");
stopWatch.start("taskName1");
Thread.sleep(1000); //模拟耗时
stopWatch.stop();
stopWatch.start("taskName2");
Thread.sleep(2000);
stopWatch.stop();
System.out.println(stopWatch.prettyPrint());
}
}
运行结果:
StopWatch 'My stop Test!': running time (millis) = 3001
-----------------------------------------
ms % Task name
-----------------------------------------
01000 033% taskName1
02001 067% taskName2
The End.