使用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()