点击上方“Java基基”,选择“设为星标”
做积极的人,而不是积极废人!
每天 14:00 更新文章,每天掉亿点点头发...
源码精品专栏
前言
近日群里有萌新提到关于统计代码执行时间的事:
![5733f89580e40f37c704de0cc23925b2.png](https://i-blog.csdnimg.cn/blog_migrate/7afe390f7c2e55a06647d4053f5b0b55.png)
开始 System.currentTimeMillis()
减去 结束 System.currentTimeMillis()
等于 耗时
其实我个人感觉OK的,就这样就蛮好的,很多项目都是这样用的。
简简单单的挺好。
![10761df86911edd69db5fd42062fe03b.png](https://i-blog.csdnimg.cn/blog_migrate/1d5cc27c9a46428fc78a30f2fa80274e.png)
这一篇就是 说点别的玩法,我很欣赏 这个小伙的求知欲, 举一反三,多了解一点没毛病。
【关键】ps: 举一反三的 三 ,还有额外的含义,即 三连,点赞、收藏、关注。
基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
项目地址:https://github.com/YunaiV/ruoyi-vue-pro
视频教程:https://doc.iocoder.cn/video/
正文
① StopWatch
第一种玩法,spring util 里面提供的 StopWatch
示例代码:
StopWatch stopWatch = new StopWatch();
stopWatch.start();
//doInsert();
//执行业务等
stopWatch.stop();
System.out.println(stopWatch.getTotalTimeMillis());
效果:
![741b2618a36f5ae1172972fad24e28e2.png](https://i-blog.csdnimg.cn/blog_migrate/1f1545ed69cb2f7873f8d74476db2ea2.png)
② System.nanoTime()
第二种玩法 System.nanoTime()
先不着急看怎么用, 我们看完第一种 StopWatch
的时候, 有没有小伙伴的思维散发够的,想着这spring 封装的统计耗时,自己是怎么实现的?
题外话:
一定要养成这种散发的思维, 很多兄弟朋友都跟我反馈过一些话题,就是说,项目里面没啥东西可学。
其实,这个很正常, 工作过程不是教导过程,你要自己有 纵向 挖掘 、横向 散发的 学习思维。
直接点StopWatch 的源码看一眼, 哦,原理是用的 System.nanoTime()
:
![03701da84ba640387499419af66880b4.png](https://i-blog.csdnimg.cn/blog_migrate/57e51508c1b0691265a46c0fc91279c8.png)
System.nanoTime()
代码使用示例 :
long startTime = System.nanoTime();
doInsert();
//执行业务
long endTime = System.nanoTime();
System.out.println((endTime - startTime));
效果 :
![f08722b069f30d4fda44a3fa12e0b11e.png](https://i-blog.csdnimg.cn/blog_migrate/46109953e07f9b9b2ef3a4c7bb53eec7.png)
③ new Date()
第三种玩法 ,平时偶尔也看到别人这么写 new Date
示例代码:
Date startDate = new Date();
// doInsert();
//执行业务等
Date endDate = new Date();
System.out.println((endDate.getTime() - startDate.getTime()));
效果:
![a3c6f7724c28206d8d2b382cb42cf441.png](https://i-blog.csdnimg.cn/blog_migrate/303c544555b2e196660f2aa4af300f7e.png)
④ System.currentTimeMillis()
省略
ps: StopWatch 其实不仅仅是封了一下耗时统计,这样也太。。了 。
里面其实封装了蛮多其他关于时间统计的函数(感兴趣的可以单独去研究研究,特别是参考作者的封装思路 ):
void start(“任务名称”)
:开始一个任务名称的计时void stop()
:停止当前任务的计时boolean isRunning()
:是否正在计时某任务long getTotalTimeMillis()
:所有任务的总体执行时间(毫秒单位)double getTotalTimeSeconds()
:所有任务的总时间(以秒为单位)long getLastTaskTimeMillis()
:上一个任务的耗时(毫秒单位)int getTaskCount()
:定时任务的数量String prettyPrint()
:优美地打印所有任务的详细耗时情况StopWatch.TaskInfo[] getTaskInfo()
:包含任务名称和任务耗时的实体类数组
好了,该篇就到这。
欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢:
已在知识星球更新源码解析如下:
最近更新《芋道 SpringBoot 2.X 入门》系列,已经 101 余篇,覆盖了 MyBatis、Redis、MongoDB、ES、分库分表、读写分离、SpringMVC、Webflux、权限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能测试等等内容。
提供近 3W 行代码的 SpringBoot 示例,以及超 6W 行代码的电商微服务项目。
获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。
文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)