Java统计代码耗时
前言
Github:https://github.com/HealerJean
1、StopWatch
- Spring
⬤
StopWatch
对象不是设计为线程安全的,并且不使用同步。⬤ 一个
StopWatch
实例一次只能开启一个task
,不能同时start
多个task
⬤ 在该
task
还没stop
之前不能start
一个新的task
,必须在该task
stop
之后才能开启新的task⬤ 若要一次开启多个,需要
new
不同的StopWatch
实例
1.1、pom
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
1.2、TestMain
@Test
public void test() throws InterruptedException {
StopWatch stopWatch = new StopWatch();
// 任务一模拟休眠3秒钟
stopWatch.start("TaskOneName");
Thread.sleep(1000 * 3);
log.info("当前任务名称:{}", stopWatch.currentTaskName());
//当前任务名称:TaskOneName
if (stopWatch.isRunning()) {
stopWatch.stop();
}
// 任务一模拟休眠10秒钟
stopWatch.start("TaskTwoName");
Thread.sleep(1000 * 10);
log.info("当前任务名称:{}", stopWatch.currentTaskName());
//当前任务名称:TaskTwoName
if (stopWatch.isRunning()) {
stopWatch.stop();
}
// 打印出耗时
log.info("stopWatch.prettyPrint():{}", stopWatch.prettyPrint());
// stopWatch.prettyPrint():StopWatch '': running time (millis) = 13016
// -----------------------------------------
// ms % Task name
// -----------------------------------------
// 03015 023% TaskOneName
// 10001 077% TaskTwoName
log.info("stopWatch.shortSummary():{}", stopWatch.shortSummary());
// stopWatch.shortSummary():StopWatch '': running time (millis) = 13016
// stop后它的值为null
log.info("stopWatch.currentTaskName():{}", stopWatch.currentTaskName());
// stopWatch.currentTaskName():null
// 最后一个任务的相关信息
log.info("stopWatch.getLastTaskName():{}", stopWatch.getLastTaskName());
//stopWatch.getLastTaskName():TaskTwoName
log.info("stopWatch.getLastTaskInfo():{}", stopWatch.getLastTaskInfo());
// stopWatch.getLastTaskInfo():org.springframework.util.StopWatch$TaskInfo@73f792cf
// 任务总的耗时 如果你想获取到每个任务详情(包括它的任务名、耗时等等)可使用
log.info("所有任务总耗时:{}", stopWatch.getTotalTimeMillis());
// 所有任务总耗时13016
log.info("任务总数:{}", stopWatch.getTaskCount());
// 任务总数2
log.info("所有任务详情:{}", stopWatch.getTaskInfo());
// 所有任务详情org.springframework.util.StopWatch$TaskInfo@2ed94a8b
}