• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

java计时器 计算接口耗时 秒表计时

武飞扬头像
弥勒大大
帮助19

Spring Boot 是用 StopWatch 来统计耗时的,而通常情况下,我们会用 System.currentTimeMillis() 来统计耗时,但是JDK 提供的 System.currentTimeMillis() 没有 Spring 提供的 StopWatch 简洁、清晰。

import org.springframework.util.StopWatch;
//这是spring自带的计时器,当然其他工具 如 hutool 也有 

public void test() {
	StopWatch stopWatch = new StopWatch("这段程序耗时");
	stopWatch.start("代码一");
	......
	stopWatch.stop();
        stopWatch.start("代码二");
	......
	stopWatch.stop();
        System.out.printf(stopWatch.prettyPrint());
}

输出结果类似这样的:

---------------------------------------------
ns         %     Task name
---------------------------------------------
249323500  004%  getuserinfo
117418200  002%  lambdaQueryChainWrapper.page
028695000  000%  getproducts
5548998400  093%  batchGetOrder

这单位是纳秒 不太直观看出来耗时秒对吧 给它写个方法换算一下

//引用的包 是
//import java.text.NumberFormat;
//

private String prettyPrintBySecond(StopWatch stopWatch) {
    StopWatch.TaskInfo[] taskInfos = stopWatch.getTaskInfo();
    StringBuilder sb = new StringBuilder();

    sb.append('\n');
    sb.append("StopWatch '").append(stopWatch.getId()).append("': running time = ").append(stopWatch.getTotalTimeSeconds()).append(" s");
    sb.append('\n');
    if (taskInfos.length < 1) {
        sb.append("No task info kept");
    } else {
        sb.append("---------------------------------------------\n");
        sb.append("s         %     Task name\n");
        sb.append("---------------------------------------------\n");
        NumberFormat nf = NumberFormat.getNumberInstance();
        nf.setMinimumFractionDigits(3);
        nf.setGroupingUsed(false);
        NumberFormat pf = NumberFormat.getPercentInstance();
        pf.setMinimumIntegerDigits(2);
        pf.setMinimumFractionDigits(2);
        pf.setGroupingUsed(false);
        for (StopWatch.TaskInfo task : taskInfos) {
            sb.append(nf.format(task.getTimeSeconds())).append("  ");
            sb.append(pf.format((double) task.getTimeNanos() / stopWatch.getTotalTimeNanos())).append("  ");
            sb.append(task.getTaskName()).append("\n");
        }
    }
    return sb.toString();
}

看下输出就变成类似这样的 很直观

StopWatch 'XXXX-query-all-time': running time = 5.9444351 s
---------------------------------------------
s         %     Task name
---------------------------------------------
0.249  04.19%  getuserinfo
0.117  01.98%  lambdaQueryChainWrapper.page
0.029  00.48%  getproducts
5.549  93.35%  batchGetOrder

对于优化接口耗时、程序耗时等很实用。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanghjbgj
系列文章
更多 icon
同类精品
更多 icon
继续加载