当前位置:网站首页>Stop using system Currenttimemillis() takes too long to count. It's too low. Stopwatch is easy to use!
Stop using system Currenttimemillis() takes too long to count. It's too low. Stopwatch is easy to use!
2022-06-27 09:38:00 【Programmer Xiaohui】
background
You're still using System.currentTimeMillis... Statistics take time ?
For example, the following code :
/**
* @author: Stack leader
* @from: official account Java Technology stack
*/
@Test
public void jdkWasteTime() throws InterruptedException {
long start = System.currentTimeMillis();
Thread.sleep(3000);
System.out.printf(" Time consuming :%dms.", System.currentTimeMillis() - start);
}System.currentTimeMillis... This method of time-consuming statistics is indeed the most used , Because it doesn't have to introduce other JAR package ,JDK You can get , But it has a few inconvenient places to use :
1) Initial time value needs to be defined , Use the current time for manual calculation ;
2) It is troublesome to count the time consumption of multiple tasks , If start Incorrect assignment may also cause logic problems ;
Is there a better alternative ? The answer is yes :StopWatch!
StopWatch
StopWatch It is a time-consuming tool class :

frequently-used StopWatch There are two types of tool classes :
commons-lang3(Apache General toolkit provided )
spring-core(Spring Core packages )
Although the names of the two tool classes are the same , But the usage is quite different , In this article, the stack leader will show you .
commons-lang3 Provided StopWatch
Introduce dependencies
commons-lang3 yes Apache Open source universal Toolkit , Additional introduction required Maven rely on :
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${commons-lang3.version}</version>
</dependency>A simple example
Create a StopWatch Examples are as follows 3 Methods :
1) Use new keyword
StopWatch sw = new StopWatch();2) Use create Factory method
StopWatch sw = StopWatch.create();3) Use createStarted Method
StopWatch sw = StopWatch.createStarted();This method will not only create an instance , It also starts the timing .
Let's take a simple example :
// Create a StopWatch Instance and start timing
StopWatch sw = StopWatch.createStarted();
// Sleep 1 second
Thread.sleep(1000);
// 1002ms
System.out.printf(" Time consuming :%dms.\n", sw.getTime());More usage
Continue with the previous example .
Pause time :
// Pause time
sw.suspend();
Thread.sleep(1000);
// 1000ms
System.out.printf(" The pause took :%dms.\n", sw.getTime());Because of the pause , So still 1000ms, Dormant after a pause 1000 ms It won't be counted .
Resume timing :
// Resume timing
sw.resume();
Thread.sleep(1000);
// 2001ms
System.out.printf(" Recovery time :%dms.\n", sw.getTime());Because of the recovery , The result is 2001 ms, Dormant after recovery 1000 ms It was counted .
Stop timing :
Thread.sleep(1000);
// Stop timing
sw.stop();
Thread.sleep(1000);
// 3009ms
System.out.printf(" Total time :%dms.\n", sw.getTime());Sleep before stopping timing 1000ms, So the result is 3009ms, You can no longer use pause after you stop timing 、 The function is restored .
Reset timing :
// Reset timing
sw.reset();
// Start timing
sw.start();
Thread.sleep(1000);
// 1000ms
System.out.printf(" Reset time :%dms.\n", sw.getTime());Because the reset timer , So when you start counting again, it becomes 1000ms.
All the complete sample source code of this article has been uploaded :
https://github.com/javastacks/javastack
welcome Star Study , Back Java Examples will be provided above ! in addition , The latest interview questions have been sorted out , You can Java Interview library applet online brush questions .
Spring Provided StopWatch
Let's take a simple example :
// Create a StopWatch example
StopWatch sw = StopWatch(" official account Java Technology stack : Test time ");
// Start timing
sw.start(" Mission 1");
// Sleep 1 second
Thread.sleep(1000);
// Stop timing
sw.stop();
// 1002ms
System.out.printf(" Mission 1 Time consuming :%d%s.\n", sw.getLastTaskTimeMillis(), "ms");Spring The way to create an instance is new, Start timing , And getting the time manually start、stop.
Continue to add 2 A mission :
Thread.sleep(1000);
sw.start(" Mission 2");
Thread.sleep(1100);
sw.stop();
// 1100ms.
System.out.printf(" Mission 2 Time consuming :%d%s.\n", sw.getLastTaskTimeMillis(), "ms");
sw.start(" Mission 3");
Thread.sleep(1200);
sw.stop();
// 1203ms.
System.out.printf(" Mission 3 Time consuming :%d%s.\n", sw.getLastTaskTimeMillis(), "ms");
// 3.309373456s.
System.out.printf(" Number of tasks :%s, Total time :%ss.\n", sw.getTaskCount(), sw.getTotalTimeSeconds());Spring An important highlight is the support for formatting print results :
System.out.println(sw.prettyPrint());Look at the final output :

But there is one thing that is not friendly , The formatted results are displayed in nanoseconds , And it can't be modified ..
Realization principle
Let's have a look at commons-lang3 and Spring The core source code of :


In fact, they all make use of JDK Medium System System classes to implement , It's just a series of packages .
summary
commons-lang3 Toolkits and Spring In the framework StopWatch Can easily complete the timing and total time of multiple tasks , No more time-consuming manual calculations , Manually calculate if start Assignment errors may also cause errors .
Of course , The above two StopWatch The function of is far more than that introduced by the stack manager , What the stack leader introduced is enough , More can be studied in depth .
All the complete sample source code of this article has been uploaded :
https://github.com/javastacks/javastack
welcome Star Study , Back Java Examples will be provided above !
Summarize the advantages and disadvantages of these two timing tool classes :
1)commons-lang3 Medium StopWatch The usage of is better than Spring The one in is simpler ;
2)commons-lang3 Medium StopWatch Functional ratio Spring Be more flexible in 、 More powerful , Support pause 、 recovery 、 Reset and other functions ;
3)Spring Provide the name of each subtask , And the function of printing results by format , Better for multi task statistics ;
in summary , Personal recommendation commons-lang3 In the kit , More flexible 、 More powerful , If you don't want to introduce additional packages , You can also consider Spring Medium , According to your own system requirements .
therefore , Don't use System.currentTimeMillis... The statistics took time , too low, Share and forward quickly , Standardize !
Okay , Today's sharing is here , I'll share more fun later Java Technology and the latest technical information , Welcome to praise and collect ~~
边栏推荐
- Flow chart of Alipay wechat payment business
- Semi supervised learning—— Π- Introduction to model, temporary assembling and mean teacher
- Source insight 工具安装及使用方法
- 技术与业务同等重要,偏向任何一方都是错误
- [vivid understanding] the meanings of various evaluation indicators commonly used in deep learning TP, FP, TN, FN, IOU and accuracy
- I'm almost addicted to it. I can't sleep! Let a bug fuck me twice!
- 使用aspose-slides将ppt转pdf
- 提高效率 Or 增加成本,开发人员应如何理解结对编程?
- R语言plotly可视化:plotly可视化基础小提琴图(basic violin plot in R with plotly)
- Parameters argc and argv of main()
猜你喜欢

prometheus告警流程及相关时间参数说明

别再用 System.currentTimeMillis() 统计耗时了,太 Low,StopWatch 好用到爆!

ucore lab4

Semi supervised learning—— Π- Introduction to model, temporary assembling and mean teacher

Preliminary understanding of pytorch

Quick start CherryPy (1)

Markem imaje马肯依玛士喷码机维修9450E打码机维修

Tdengine invitation: be a superhero who uses technology to change the world and become TD hero

leetcode:968. 监控二叉树【树状dp,维护每个节点子树的三个状态,非常难想权当学习,类比打家劫舍3】
![[system design] proximity service](/img/02/57f9ded0435a73f86dce6eb8c16382.png)
[system design] proximity service
随机推荐
SVN版本控制器的安装及使用方法
vector::data() 指针使用细节
使用Aspose.cells将Excel转成PDF
Nosql 数据库 -Redis 安装
使用aspose-slides将ppt转pdf
Semi supervised learning—— Π- Introduction to model, temporary assembling and mean teacher
Tdengine invitation: be a superhero who uses technology to change the world and become TD hero
Only one ConfirmCallback is supported by each RabbitTemplate 解决办法
Advanced mathematics Chapter 7 differential equations
QT运行显示 This application failed to start because it could not find or load the Qt platform plugin
[diffusion model]
运维一线工作常用shell脚本再整理
Conception de plusieurs classes
新旧两个界面对比
Take you to play with the camera module
ucore lab3
Several cases that do not initialize classes
leetcode:522. 最长特殊序列 II【贪心 + 子序列判断】
IO pin configuration and pinctrl drive
基于STM32设计的蓝牙健康管理设备