⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 blog.csdn.net/qq_35387940/article/details/128444074 「小目标青年」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注**微信公众号:【芋道源码】**有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言将得到认真回复。甚至不知道如何读源码也可以请教噢
  4. 新的源码解析文章实时收到通知。每周更新一篇左右
  5. 认真的源码交流微信群。

前言

近日群里有萌新提到关于统计代码执行时间的事:

开始 System.currentTimeMillis() 减去 结束 System.currentTimeMillis() 等于 耗时

其实我个人感觉OK的,就这样就蛮好的,很多项目都是这样用的。

简简单单的挺好。

这一篇就是 说点别的玩法,我很欣赏 这个小伙的求知欲, 举一反三,多了解一点没毛病。

【关键】ps: 举一反三的 三 ,还有额外的含义,即 三连,点赞、收藏、关注。

正文

① StopWatch

第一种玩法,spring util 里面提供的 StopWatch

示例代码:

StopWatch stopWatch = new StopWatch();
stopWatch.start();
//doInsert();
//执行业务等
stopWatch.stop();
System.out.println(stopWatch.getTotalTimeMillis());

效果:

② System.nanoTime()

第二种玩法 System.nanoTime()

先不着急看怎么用, 我们看完第一种 StopWatch 的时候, 有没有小伙伴的思维散发够的,想着这spring 封装的统计耗时,自己是怎么实现的?

题外话:

一定要养成这种散发的思维, 很多兄弟朋友都跟我反馈过一些话题,就是说,项目里面没啥东西可学。

其实,这个很正常, 工作过程不是教导过程,你要自己有 纵向 挖掘 、横向 散发的 学习思维。

直接点StopWatch 的源码看一眼, 哦,原理是用的 System.nanoTime()

System.nanoTime() 代码使用示例 :

long startTime = System.nanoTime();
doInsert();
//执行业务
long endTime = System.nanoTime();
System.out.println((endTime - startTime));

效果 :

③ new Date()

第三种玩法 ,平时偶尔也看到别人这么写 new Date

示例代码:

 Date startDate = new Date();
// doInsert();
//执行业务等
Date endDate = new Date();
System.out.println((endDate.getTime() - startDate.getTime()));

效果:

④ System.currentTimeMillis()

省略

ps: StopWatch 其实不仅仅是封了一下耗时统计,这样也太。。了 。

里面其实封装了蛮多其他关于时间统计的函数(感兴趣的可以单独去研究研究,特别是参考作者的封装思路 ):

  • void start(“任务名称”):开始一个任务名称的计时
  • void stop():停止当前任务的计时
  • boolean isRunning():是否正在计时某任务
  • long getTotalTimeMillis():所有任务的总体执行时间(毫秒单位)
  • double getTotalTimeSeconds():所有任务的总时间(以秒为单位)
  • long getLastTaskTimeMillis():上一个任务的耗时(毫秒单位)
  • int getTaskCount():定时任务的数量
  • String prettyPrint():优美地打印所有任务的详细耗时情况
  • StopWatch.TaskInfo[] getTaskInfo():包含任务名称和任务耗时的实体类数组

好了,该篇就到这。

文章目录
  1. 1. 前言
  2. 2. 正文
    1. 2.1. ① StopWatch
    2. 2.2. ② System.nanoTime()
    3. 2.3. ③ new Date()
    4. 2.4. ④ System.currentTimeMillis()