- 通常统计耗时:System.currentTimeMillis()
long startTime = System.currentTimeMillis();
long endTime = System.currentTimeMillis();
webLog.setSpendTime((int) (endTime - startTime));
- 用 Spring Boot的StopWatch 来统计耗时
// 创建一个 StopWatch 实例
StopWatch sw = new StopWatch("统计程序执行时间。。。");
// 开始计时
sw.start("任务1");
Thread.sleep(1000);
// 停止计时
sw.stop();
System.out.printf("任务1耗时:%d%s.\n", sw.getLastTaskTimeMillis(), "ms");
sw.start("任务2");
Thread.sleep(1100);
sw.stop();
System.out.printf("任务2耗时:%d%s.\n", sw.getLastTaskTimeMillis(), "ms");
System.out.printf("任务数量:%s,总耗时:%ss.\n", sw.getTaskCount(), sw.getTotalTimeSeconds());
步骤:
- 先 new 一个 StopWatch 对象
- 再 start 开始计时
- 然后 stop 停止计时
- 最后通过 sw.getLastTaskTimeMillis() 得出时间差
除了可以通过局部时间,还可以通过 sw.getTotalTimeSeconds() 获取总的耗时
除了 Spring,hutool 工具库和 Apache common 工具包都提供了各自的 StopWatch
hutool中的 StopWatch 就来自 Spring 的 StopWatch.java,用法也完全一致
- Apache commons-lang3 的 StopWatch 也是一个不错的可选项,更加灵活多变。
// commons-lang3 还可以通过 createStarted(创建并立即启动)、create(创建)来完成。
// 还可以调用 suspend 方法暂停计时、resume 方法恢复计时、reset 重新计时
StopWatch sw = StopWatch.createStarted();
Thread.sleep(1000);
System.out.printf("耗时:%dms.\n", sw.getTime());
// 暂停计时
sw.suspend();
System.out.printf("暂停耗时:%dms.\n", sw.getTime());
// 恢复计时
sw.resume();
System.out.printf("恢复耗时:%dms.\n", sw.getTime());
// 停止计时
sw.stop();
System.out.printf("总耗时:%dms.\n", sw.getTime());
// 重置计时
sw.reset();
// 开始计时
sw.start();
System.out.printf("重置耗时:%dms.\n", sw.getTime());