使用StopWatch分析任务耗时

使用StopWatch分析任务耗时

计算任务耗时,是个Java都会。

long start = System.currentTimeMillis();
// TODO 任务执行代码
long end = System.currentTimeMillis();
long result = end - start;

如果要求再复杂点儿,需要连续执行N个任务,要求计算总耗时,每个任务的耗时,占用总执行时间的比例。。。很显然,这也难不倒你。你八成迫不及待的想到写一个出来了,可以,但是没必要。

StopWatch

spring提供的了一个工具类,可以很方便的计算,分析任务耗时
org.springframework.util.StopWatch

注意,它不是线程安全的
注意,它不是线程安全的
注意,它不是线程安全的

演示

import org.springframework.util.StopWatch;

public class Main {
	public static void main(String[] args) throws Throwable{
		StopWatch stopWatch = new StopWatch("id");

		// 开始第一个任务
		stopWatch.start("task1");
		Thread.sleep(2000L);
		stopWatch.stop();

		// 开始第二个任务
		stopWatch.start("task2");
		Thread.sleep(3000L);
		stopWatch.stop();

		// 获取格式化后的打印结果
		String prettyPrint = stopWatch.prettyPrint();

		System.out.println(prettyPrint);
	}
}
/*
StopWatch 'id': running time (millis) = 5000
-----------------------------------------
ms     %     Task name
-----------------------------------------
02000  040%  task1
03000  060%  task2
*/

prettyPrint() 可以获取到格式化后的结果字符串。详细显示了每个任务的耗时,总耗时,单个任务耗时占总时间的比例

部分API

这个工具类太简单。源码,一看就懂。这里懒全部写了。

String getId()
TaskInfo getLastTaskInfo()
	* 获取最后一个执行的任务耗时

String getLastTaskName()
    * 最后一个执行的任务名称
long getLastTaskTimeMillis()
int getTaskCount()
	* 获取执行任务的次数

TaskInfo[] getTaskInfo()
    * 获取到所有执行过的任务耗时(前提是 keepTaskList = true)
long getTotalTimeMillis()
	* 获取所有任务执行的总耗时, 毫秒

double getTotalTimeSeconds()
	* 获取所有任务执行的总耗时, 秒 

boolean isRunning()
String prettyPrint()
void setKeepTaskList(boolean keepTaskList)
	* 是否保存每个执行过的任务耗时结果
    * 内部有一个LinkedList缓存,如果需要,可以保存

String shortSummary()
void start()
void start(String taskName)
void stop() 
String toString()
1 个赞