1、背景
有时我们在做开发的时候需要记录每个任务执行的时间,或者记录一段代码执行的时间,比较常见的方法就是通过System.currentTimeMillis()分别获取执行前后执行后的两次时间,然后做减法得出执行时间,这样做虽然也能达到效果,但如果执行大量测试的话就很麻烦,并且不直观,如果想对执行的时间作进一步控制,则需要在程序中修改很多地方。目前spring提供了一个StopWatch工具类可以做类似任务时间控制,也就是封装了一个对开始时间和结束时间记录的工具。
2、示例
统计代码执行总耗时:
public static void main(String[] args) throws InterruptedException {
StopWatch stopWatch = new StopWatch();
stopWatch.start();
System.out.println("啦啦啦");
Thread.sleep(2000);
stopWatch.stop();
System.out.println("执行共计耗时为:" + stopWatch.getTotalTimeMillis() + "毫秒");
}
输出执行一个任务的耗时:
public static void main(String[] args) throws InterruptedException {
StopWatch stopWatch = new StopWatch();
stopWatch.start("taskName");
// 从start至stop这一段代码就相当于一个任务,并给他起名为taskName
Thread.sleep(1000);
stopWatch.stop();
System.out.println("执行taskName任务共计耗时为:" + stopWatch.getTotalTimeMillis() + "毫秒");
}
以优雅的格式打印出所有任务的耗时及占比:
public static void main(String[] args) throws InterruptedException {
StopWatch stopWatch = new StopWatch();
stopWatch.start("A");
Thread.sleep(200);
stopWatch.stop();
stopWatch.start("B");
Thread.sleep(300);
stopWatch.stop();
stopWatch.start("C");
Thread.sleep(500);
stopWatch.stop();
System.out.println(stopWatch.prettyPrint());
}
3、常见用法:
1、getTotalTimeSeconds() 获取总耗时秒
2、getTotalTimeMillis() 获取总耗时毫秒
3、prettyPrint() 以优雅的表格形式打印结果
4、getTaskCount() 获取统计时间任务的总数量
4、总结
以后我们在统计代码执行时间的时候,建议大家都是用在个工具来帮助我们统计,不要在startTime、endTime相减计算了,有一个这么优雅且方便的工具为什么不好好利用起来呢?