统计代码耗时的工具
项目中通常会通过打印时间来查看某段任务的耗时,进行项目优化
通常会通过t2-t1的方式进行统计
public static void main(String[] args) throws InterruptedException {
StopWatchTest.test0();
// StopWatchTest.test1();
}
public static void test0() throws InterruptedException {
long start = System.currentTimeMillis();
// do something
Thread.sleep(100);
long end = System.currentTimeMillis();
long start2 = System.currentTimeMillis();
// do something
Thread.sleep(200);
long end2 = System.currentTimeMillis();
System.out.println("任务1执行耗时:" + (end - start));
System.out.println("任务2执行耗时:" + (end2 - start2));
}
spring StopWatch用法
spring-framework提供了一个StopWatch类可以做类似任务执行时间控制,也就是封装了一个对开始时间,结束时间记录操作的Java类,小例一则如下
栗子:
package com.example.stopwatch;
import org.springframework.util.StopWatch;
public class TestStopWatch {
private void test() throws InterruptedException {
StopWatch sw = new StopWatch();
sw.start("任务1");
Thread.sleep(1000);
sw.stop();
sw.start("任务2");
Thread.sleep(2000);
sw.stop();
sw.start("任务3");
Thread.sleep(500);
sw.stop();
System.out.println(sw.prettyPrint());
System.out.println(sw.getTotalTimeMillis());
System.out.println(sw.getLastTaskName());
System.out.println(sw.getLastTaskInfo());
System.out.println(sw.getTaskCount());
}
public static void main(String []argv) throws InterruptedException {
TestStopWatch testStopWatch = new TestStopWatch();
testStopWatch.test();
}
}
结果
StopWatch '': running time (millis) = 3518
-----------------------------------------
ms % Task name
-----------------------------------------
00998 028% 任务1
02020 057% 任务2
00500 014% 任务3
3518
任务3
org.springframework.util.StopWatch$TaskInfo@5b2133b1
3
一个StopWatch实例一次只能开启一个task,不能同时start多个task,并且在该task未stop之前不能start一个新的task,必须在该task stop之后才能开启新的task,若要一次开启多个,需要new不同的StopWatch实例.
计时器工具-TimeInterval
Hutool通过封装TimeInterval实现计时器功能,即可以计算方法或过程执行的时间。
TimeInterval支持分组计时,方便对比时间。
使用
TimeInterval timer = DateUtil.timer();
//---------------------------------
//-------这是执行过程
//---------------------------------
timer.interval();//花费毫秒数
timer.intervalRestart();//返回花费时间,并重置开始时间
timer.intervalMinute();//花费分钟数
也可以实现分组计时:
final TimeInterval timer = new TimeInterval();
// 分组1
timer.start("1");
ThreadUtil.sleep(800);
// 分组2
timer.start("2");
ThreadUtil.sleep(900);
Console.log("Timer 1 took {} ms", timer.intervalMs("1"));
Console.log("Timer 2 took {} ms", timer.intervalMs("2"));