Spring计时器StopWatch使用

在项目中,我们一般需要看一段处理逻辑的运行时间,之前写法如下:

复制代码
    public void oldTest() throws Exception{
        long start = System.currentTimeMillis();
        Thread.sleep(new Double(Math.random()*1000).longValue());
        long stop = System.currentTimeMillis();
        long start1 = System.currentTimeMillis();
        Thread.sleep(new Double(Math.random()*1000).longValue());
        long stop1 = System.currentTimeMillis();
        log.info("测试使用时间=={}", stop - start);
        log.info("测试使用时间1=={}", stop1 - start1);
    }
复制代码

输出结果:

‘这样写非常简单有效,但是写的多了就会比较烦,且输出不够直观,然后看下Spring提供的工具类  StopWatch

复制代码
    public void newTest() throws Exception{
        StopWatch sw = new StopWatch("newTest");
        sw.start("test1");
        Thread.sleep(new Double(Math.random()*1000).longValue());
        sw.stop();
        sw.start("test2");
        Thread.sleep(new Double(Math.random()*1000).longValue());
        sw.stop();
        log.info("sw.prettyPrint()===={}" ,sw.prettyPrint());
        log.info("sw.shortSummary()===={}" ,sw.shortSummary());
    }
复制代码

输出结果:

 

 通过输出会发现,使用prettyPrint可以打印每一个环节使用的时间及所占用时比例。

然后就是看一下StopWatch优缺点了

  优点: spring自带工具类,可直接使用 代码实现简单,使用更简单 统一归纳,展示每项任务耗时与占用总时间的百分比,展示结果直观 性能消耗相对较小,并且最大程度的保证了start与stop之间的时间记录的准确性 可在start时直接指定任务名字,从而更加直观的显示记录结果

  缺点: 一个StopWatch实例一次只能开启一个task,不能同时start多个task,并且在该task未stop之前不能start一个新的task,必须在该task stop之后才能开启新的task,若要一次开启多个,需要new不同的StopWatch实例 代码侵入式使用,需要改动多处代码

posted @   李聪龙  阅读(285)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示