当前位置:网站首页>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-22 23:14:00 【Java technology stack】
background
You're still using System.currentTimeMillis... Statistics take time ?
For example, the following code :
/** * @author: Stack leader * @from: official account Java Technology stack */@Testpublic 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);// 1002msSystem.out.printf(" Time consuming :%dms.\n", sw.getTime()); More usage
Continue with the previous example .
Pause time :
// Pause time sw.suspend();Thread.sleep(1000);// 1000msSystem.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);// 2001msSystem.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);// 3009msSystem.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);// 1000msSystem.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 :
welcome Star Study , Back Java Examples will be provided above !
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();// 1002msSystem.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 :
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 , Later, the stack leader will share more fun Java Technology and the latest technical information , Official account Java The first time the technology stack pushes , I will also mainstream Java The interview questions and reference answers have been sorted out , Reply key in background of official account " interview " Write the questions .
Copyright notice : The official account is No. "Java Technology stack " original , Reprint 、 Please indicate the source of this article , Plagiarism 、 If you wash your manuscript, you will complain about infringement , Consequence conceit , And reserves the right to pursue its legal liability .
Recent hot article recommends :
1.1,000+ Avenue Java Arrangement of interview questions and answers (2022 The latest version )
2. Explode !Java Xie Cheng is coming ...
3.Spring Boot 2.x course , It's too complete !
4. Don't write about the explosion on the screen , Try decorator mode , This is the elegant way !!
5.《Java Development Manual ( Song Mountain version )》 The latest release , Download it quickly !
I think it's good , Don't forget to like it + Forward !
边栏推荐
- Talk about SQL profile again: can I fix the execution plan?
- Relationship between adau1452 development system interface and code data
- Freshman girls' nonsense programming is popular! Those who understand programming are tied with Q after reading
- 2021-03-06
- 【22暑期复建1】 Codeforces Round #791 (Div. 2)
- Why do you perform performance tests before the software goes online? How to find a software performance testing organization
- 2021-04-14
- 2020-12-20
- Generate detailed API and parameters of QR code using qrcodejs2
- Which securities company is the safest and best choice for stock trading account opening
猜你喜欢

2020-12-04

C language -- 17 function introduction

Explain the startup process of opengauss multithreading architecture in detail

LinkedList source code analysis

2021-08-22

Three cache methods and principles

2021-04-14

2021-04-16

Grafana report display of sentinel based high availability current limiting system

Install the typescript environment and enable vscode to automatically monitor the compiled TS file as a JS file
随机推荐
MySQL constraints
SOA Service Oriented Architecture
. Net 5.0 realizes the source code analysis of the oidc authentication part of single sign on through identityserver4
斐波那契数列合集
多种方案实现图片的懒加载
MySQL master-slave synchronization and its basic process of database and table division
使用Redisson操作分布式队列的注意事项
AutoCAD - five annotation shortcuts
剑指 Offer 07. 重建二叉树
2020-12-04
2020-12-20
js判断浏览器是否打开了控制台
How to quickly build an enterprise knowledge base at low cost?
Introduction to database access tools
Spark SQL 访问json和jdbc数据源
SSH method 2 for adding node nodes in Jenkins
From 11 hours to 25 seconds -- is there room for optimization?
Practice brings true knowledge: the strongest seckill system architecture in the whole network is decrypted. Not all seckills are seckills!!
Palindromes (simple version)
Redis big key problem