当前位置: 首页 > news >正文

Java中使用StopWatch实现代码块耗时统计/计时某段代码执行

场景

Java实战-基于JDK的LRU算法实现、优雅的实现代码耗时统计(Spring AOP、AutoCloseable方式):

Java实战-基于JDK的LRU算法实现、优雅的实现代码耗时统计(Spring AOP、AutoCloseable方式)_lru 算法 jdk-CSDN博客

上面讲了统计方法的耗时,实现和使用面向方法体。

如果是在方法中,需要频繁统计一段段的代码块的耗时,可以使用StopWatch。

注:

博客:
霸道流氓气质-CSDN博客

实现

1、StopWatch是Spring框架中的一个计时器工具类,

其原理是基于System.currentTimeMillis(),并且简化了计时的逻辑。

StopWatch的实现机制是通过startTime和endTime两个时间戳的方式来记录代码块的执行时间。

路径:import org.springframework.util.StopWatch;

常用api:

start():可以不传入参数,开始一个无名称的任务的计时,也可以传入String类型的参数来开始指定任务名的任务计时
stop():停止当前任务的计时
isRunning():返回此stopWatch是否正在计时某任务
getTotalTimeMillis():返回所有任务的总体执行时间(毫秒单位)
getLastTaskTimeMillis():返回上一个任务的耗时(毫秒单位)
prettyPrint():优美地打印所有任务的详细耗时情况

2、使用示例

        StopWatch stopWatch = new StopWatch("test01");stopWatch.start("task1");TimeUnit.SECONDS.sleep(2);System.out.println(stopWatch.isRunning());//trueSystem.out.println(stopWatch.currentTaskName());//task1stopWatch.stop();System.out.println(stopWatch.isRunning());//falseSystem.out.println(stopWatch.getLastTaskName());//task1System.out.println(stopWatch.getTotalTimeMillis());//2010stopWatch.start("task2");TimeUnit.SECONDS.sleep(1);stopWatch.stop();System.out.println(stopWatch.getLastTaskName());//task2System.out.println(stopWatch.getLastTaskTimeMillis());//1008System.out.println(stopWatch.getTaskCount());//2System.out.println(stopWatch.shortSummary());//StopWatch 'test01': running time = 3018953100 ns//StopWatch 'test01': running time = 3018953100 nsSystem.out.println(stopWatch.prettyPrint());//---------------------------------------------//ns         %     Task name//---------------------------------------------//2010357100  067%  task1//1008596000  033%  task2

运行结果

相关文章:

  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • C语言指针学习 之 指针是什么
  • python验证服务器或容器端口是否可以用
  • Linux(ubuntu) -- 安装后调配
  • C语言实现12种排序算法
  • kubernetes内外网通信-集群外节点访问 pod ip
  • k8s二进制及负载均衡集群部署详解
  • grafana安装DevOpsProdigy KubeGraf 1.5.2
  • 协作办公开源神器:ONLYOFFICE
  • BrainAGE作为大脑老化的神经影像标志物的十年
  • 微信小程序for循环嵌套
  • css3 属性 backface-visibility 的实践应用
  • map和set封装
  • unity addressables 加载资源和场景 显示进度条(主要用于WebGL)
  • postman之接口参数签名(js接口HMAC-SHA256签名)
  • 0x05 Python数据分析,Anaconda八斩刀
  • android图片蒙层
  • JS 面试题总结
  • js面向对象
  • Just for fun——迅速写完快速排序
  • Python3爬取英雄联盟英雄皮肤大图
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • VUE es6技巧写法(持续更新中~~~)
  • Vue 动态创建 component
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 安卓应用性能调试和优化经验分享
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 前端面试之闭包
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 小程序 setData 学问多
  • 新书推荐|Windows黑客编程技术详解
  • - 转 Ext2.0 form使用实例
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • 第二十章:异步和文件I/O.(二十三)
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • ​卜东波研究员:高观点下的少儿计算思维
  • ​你们这样子,耽误我的工作进度怎么办?
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • (2.2w字)前端单元测试之Jest详解篇
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (MATLAB)第五章-矩阵运算
  • (SpringBoot)第七章:SpringBoot日志文件
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • .NET框架类在ASP.NET中的使用(2) ——QA
  • .xml 下拉列表_RecyclerView嵌套recyclerview实现二级下拉列表,包含自定义IOS对话框...
  • @RequestMapping处理请求异常
  • @RequestParam @RequestBody @PathVariable 等参数绑定注解详解
  • [ vulhub漏洞复现篇 ] ECShop 2.x / 3.x SQL注入/远程执行代码漏洞 xianzhi-2017-02-82239600
  • [2019.3.5]BZOJ1934 [Shoi2007]Vote 善意的投票
  • [HAOI2016]食物链
  • [hdu 2826] The troubles of lmy [简单计算几何 - 相似]