业务代码或者算法性能一直是我们重要的关注点之一。而衡量性能的重要指标之一就是时间复杂度。我们除了用大O表示法外,有时还需要直观地通过程序的实际运行时间衡量算法的性能。今天我们就介绍一下在计时方面十分重要的工具类StopWatch

StopWatch是不在java标准包中的,你可以在以下两个程序包中找到StopWatch工具类

  • org.apache.commons.lang3.time

    • Apache Commons Lang提供了一些Java标准库中没有提供的类与方法,尤其是在String操作方法,基础数值方法,对象引用,并发行,创建及序列化,系统属性等方面提供了强大的功能
  • org.springframework.util
    • spring框架为现代java企业级应用提供了一个简洁并且富有表达能力的可以运行在任何部署平台的编程与设置模型

现在分别讲解一下两程序包中的StopWatch工具类的具体用法。

Apache Commons Lang中的StopWatch

Apache Commons Lang中的StopWatch与我们平时常用的秒表的行为比较类似,我们先看一下其中的一些重要方法

  • 构造器:可以使用无参构造器,也可以使用传入了一个String类型的message的构造器,创建一个有字符串表示的秒表对象
  • 方法
    • start():开始计时
    • stop():停止计时
    • suspend():暂停秒表
    • resume():恢复秒表
    • reset():重置秒表
    • split():设定split点
    • getSplitTime():获取时间,时间为从计时起点到最新设置的split点之间的时长
    • getTime():显示当前秒表时间,可以通过指定TimeUnit来指定返回的时间单位

附示例代码(Junit测试类)

import org.apache.commons.lang3.time.StopWatch;
import org.junit.Test;
​
import java.util.concurrent.TimeUnit;
​
public class StopWatchTest {@Testpublic void testStopWatch() throws InterruptedException {StopWatch stopWatch = new StopWatch();sleepOneSecondAndGetStopWatchReading(stopWatch);stopWatch.start();sleepOneSecondAndGetStopWatchReading(stopWatch);stopWatch.stop();sleepOneSecondAndGetStopWatchReading(stopWatch);stopWatch.reset();sleepOneSecondAndGetStopWatchReading(stopWatch);stopWatch.start();sleepOneSecondAndGetStopWatchReading(stopWatch);stopWatch.split();sleepOneSecondAndGetStopWatchReading(stopWatch);stopWatch.split();sleepOneSecondAndGetStopWatchReading(stopWatch);stopWatch.unsplit();sleepOneSecondAndGetStopWatchReading(stopWatch);stopWatch.split();System.out.println("Last Split time :"+stopWatch.getSplitTime()+" ms");System.out.println(stopWatch.toSplitString());System.out.println(stopWatch.toString());}
​private void sleepOneSecondAndGetStopWatchReading(StopWatch stopWatch) throws InterruptedException {Thread.sleep(1000);System.out.println("StopWatch Time: "+stopWatch.getTime(TimeUnit.MILLISECONDS)+"ms");}
}

运行结果

StopWatch Time: 0ms
StopWatch Time: 1013ms
StopWatch Time: 1013ms
StopWatch Time: 0ms
StopWatch Time: 1006ms
StopWatch Time: 2009ms
StopWatch Time: 3024ms
StopWatch Time: 4031ms
Last Split time :4031 ms
00:00:04.031
00:00:04.049
​
Process finished with exit code 0

Spring Framework中的StopWatch

相比于Apache Commons Lang中的StopWatch,Spring Framework中的StopWatch提供了额外的任务计时功能:不仅可以统计单个任务时间,还可以优雅地打印出多个任务的详细耗时情况

我们先看一下StopWatch类的构造器和一些关键方法

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

示例代码

public static void main(String[] args) {StopWatch stopWatch = new StopWatch();for (int i=0;i<10;i++){stopWatch.start("Task"+i);//Some Real Business LogicstopWatch.stop();}stopWatch.prettyPrint();
}

代码中启动并在真正的业务逻辑完成后分别停止了十个任务的计时,最终我们可以通过prettyPrint方法来获得详细的任务执行耗时情况

对StopWatch类使用的思考

由于start()和stop()方法通常需要成对被调用,而且通常分别处于被计时代码块的起始位置和结束位置,所以一定要注意被计时的代码块中的逻辑是否有可能导致stop()和start()的成对调用关系被破坏而抛出IllegalStateException(如,tryCatchFinally,continue,break等等)

需要更多教程,微信扫码即可

Java中的秒表-StopWatch相关推荐

  1. java stopwatch_Java中的秒表-StopWatch

    业务代码或者算法的性能一直是我们重要的关注点之一.而衡量性能的重要指标之一就是时间复杂度.我们除了用大O表示法外,有时还需要直观地通过程序的实际运行时间衡量算法的性能.今天我们就介绍一下在计时方面十分 ...

  2. stopwatch_在Java中衡量执行时间– Spring StopWatch示例

    stopwatch 有两种方法可以通过使用System.currentTimeinMillis()或使用System.nanoTime() 来测量Java中经过的执行时间 . 这两个方法可用于测量 J ...

  3. 在Java中衡量执行时间– Spring StopWatch示例

    有两种方法可以通过使用System.currentTimeinMillis()或通过使用System.nanoTime() 来测量Java中经过的执行时间 . 这两个方法可用于测量 Java中两个方法 ...

  4. java中stopwatch,Java StopWatch.stop方法代碼示例

    本文整理匯總了Java中org.hsqldb.lib.StopWatch.stop方法的典型用法代碼示例.如果您正苦於以下問題:Java StopWatch.stop方法的具體用法?Java Stop ...

  5. java 中stopwatch_StopWatch使用介绍

    StopWatch是Spring核心包中的一个工具类,它是一个简单的秒表工具,可以计时指定代码段的运行时间以及汇总这个运行时间,使用它可以隐藏使用 System.currentTimeMillis() ...

  6. Java计时新姿势StopWatch

    文章目录 一.背景 二.spring 用法 2.1 初遇 2.2 源码 2.3 注意事项 三.apache 用法 四.最后 利用StopWatch监控Java代码运行时间和分析性能 一.背景   有时 ...

  7. Spring的秒表StopWatch优雅的程序计时器 -第455篇

    历史文章(文章累计450+) <国内最全的Spring Boot系列之一> <国内最全的Spring Boot系列之二> <国内最全的Spring Boot系列之三> ...

  8. 高精度秒表StopWatch的使用方法及示例程序

    一.高精度秒表StopWatch的使用方法: StopWatch使用的命名空间: using System.Diagnostics; StopWatch的使用方法: 创建Stopwatch对象:sto ...

  9. 2022年Java计时新姿势StopWatch

    一.背景   有时我们在做开发的时候需要记录每个任务执行时间,或者记录一段代码执行时间,最简单的方法就是打印当前时间与执行完时间的差值,一般我们检测某段代码执行的时间,都是以如下方式来进行的: pub ...

最新文章

  1. Vivado如何计算关键路径的建立时间裕量?(实践篇)
  2. 正则表达式入门之使用元字符
  3. HDU 1874 畅通工程续 (Dijkstra , Floyd , SPFA, Bellman_Ford 四种算法)
  4. uva 12558 Egyptian Fractions (HARD version)
  5. 如何在C# 中使用WMI 实现远程查询和共享
  6. 单镜头反光相机是什么
  7. python适用于什么系统_Python适合在什么系统
  8. 190607每日一句
  9. Diameter协议学习笔记一(协议介绍)
  10. 计算机辅助几何设计等值曲线,中国科学技术大学硕士专业:计算机辅助几何设计...
  11. 国内外贵金属白银有何区别?
  12. html select文字居中显示,用CSS将select/option文本居中
  13. 视频中的目标检测与图像中的目标检测具体有什么区别?
  14. 最新《播布客李明新概念C语言作品》
  15. wifi的WPS功能
  16. SparkSteaming细节问题
  17. mysql产品分类_MySQL习题1 一对多实例 产品和分类
  18. ExecuteScaler的三种返回值
  19. 怎样更换计算机开机画面,如何给win10电脑更换一个漂亮的开机界面
  20. 利用rect函数截取原图的图像OPENCV

热门文章

  1. 你会为了好工作和优质配偶整容吗?
  2. 高通发布一系列新型WiFi芯片:兼容WiFi 6技术
  3. 蔚来与雷蛇联合推出NIO ES6限量版车型 售价46.78万元
  4. 网信集团:一直在正常运营 高管被带走消息不实
  5. 降为千元机!小米6X 6+64G版到手价999元
  6. 期待!华为或在今年8月/9月推出自家操作系统
  7. 滴滴试行“选择路线”功能 乘客可自主选择行驶路线
  8. C++在类中能定义本身类型的成员
  9. c 文件操作_你电脑用久了,会有多少重复文件?快用它来整理一下吧
  10. double类型最大值_2020重新出发,JAVA入门,数据类型