`

StopWatch:Spring计时器

 
阅读更多

 StopWatch是位于org.springframework.util包下的一个工具类,通过它可方便的对程序部分代码进行计时(ms级别),适用于同步单线程代码块。
 正常情况下,我们如果需要看某段代码的执行耗时,会通过如下的方式进行查看:

public static void main(String[] args) throws InterruptedException {
     StopWatchTest.test0();
//        StopWatchTest.test1();
}

public static void test0() throws InterruptedException {
     long start = System.currentTimeMillis();
     // do something
     Thread.sleep(100);
    long end = System.currentTimeMillis();
    long start2 = System.currentTimeMillis();
    // do something
    Thread.sleep(200);
    long end2 = System.currentTimeMillis();
    System.out.println("某某1执行耗时:" + (end - start));
    System.out.println("某某2执行耗时:" + (end2 - start2));
}

   运行的结果为:

运行结果:
某某1执行耗时:105
某某2执行耗时:203

    该种方法通过获取执行完成时间与执行开始时间的差值得到程序的执行时间,简单直接有效,但想必写多了也是比较烦人的,尤其是碰到不可描述的代码时,会更加的让人忍不住多写几个bug聊表敬意,而且该结果也不够直观,此时会想是否有一个工具类,提供了这些方法,或者自己写个工具类,刚好可以满足这种场景,并且把结果更加直观的展现出来。

 首先我们的需求如下:

记录开始时间点
记录结束时间点
输出执行时间及各个时间段的占比

 

 根据该需求,我们可直接使用org.springframework.util包下的一个工具类StopWatch,通过该工具类,我们对上述代码做如下改造:

 

public static void main(String[] args) throws InterruptedException {
//        StopWatchTest.test0();
     StopWatchTest.test1();
}

public static void test1() throws InterruptedException {
     StopWatch sw = new StopWatch("test");
     sw.start("task1");
     // do something
    Thread.sleep(100);
    sw.stop();
    sw.start("task2");
    // do something
    Thread.sleep(200);
    sw.stop();
    System.out.println("sw.prettyPrint()~~~~~~~~~~~~~~~~~");
    System.out.println(sw.prettyPrint());
}

 运行结果:

 

运行结果:
sw.prettyPrint()~~~~~~~~~~~~~~~~~
StopWatch 'test': running time (millis) = 308
-----------------------------------------
ms     %     Task name
-----------------------------------------
00104  034%  task1
00204  066%  task2

  StopWatch优缺点:

优点:

1、spring自带工具类,可直接使用

2、代码实现简单,使用更简单

3、统一归纳,展示每项任务耗时与占用总时间的百分比,展示结果直观

4、性能消耗相对较小,并且最大程度的保证了start与stop之间的时间记录的准确性

5、可在start时直接指定任务名字,从而更加直观的显示记录结果

 

缺点:

1、一个StopWatch实例一次只能开启一个task,不能同时start多个task,并且在该task未stop之前不能start一个新的task,必须在该task stop之后才能开启新的task,若要一次开启多个,需要new不同的StopWatch实例

2、代码侵入式使用,需要改动多处代码

分享到:
评论

相关推荐

    Spring计时器StopWatch使用示例

    Spring计时器StopWatch使用示例详解 Stopwatch是Spring框架提供的一个工具类,位于org.springframework.util包下,主要用于对程序部分代码进行计时(ms级别),适用于同步单线程代码块。在开发过程中,我们经常...

    计时器!计时器!StopWatch-1.1.zip

    StopWatch-1.1.zip是一款专为帮助用户管理和控制时间的软件工具,其核心功能是提供一个简单易用的计时器。计时器在日常生活和工作中扮演着重要的角色,无论是学习、工作还是健身,都能有效地提醒我们把握时间,避免...

    stopwatch:具有计时功能且易于使用的静态方法的秒表类。 对诊断有用

    `Stopwatch`类通常用于计算代码执行的时间间隔,它通过操作系统提供的高性能计时器来获取时间戳,确保了高精度。在.NET中,`Stopwatch`的主要方法包括: 1. **Start()**:开始计时。当调用此方法时,秒表开始记录...

    page-timing::stopwatch:测量浏览器计时并执行一些操作

    :stopwatch: 收集和衡量浏览器性能指标 所有指标均转换为snake_case import { navigation , paint } from 'page-timing' ; ( async ( ) => { const results = await Promise . all ( [ paint ( ) , navigation ...

    Qt写的计时器的源码实例

    4. **处理时间更新**:在`StopWatch::updateTime`函数中,可以更新显示的时间并处理其他逻辑。这可能包括计算已过去的时间,更新UI界面的显示等。 5. **控制计时器**:根据需求,可能还需要提供开始、暂停和重置...

    :stopwatch:MakeLaravel模型可版本化-PHP开发

    laravel-versionable:stopwatch:使Laravel模型可版本化。 这是创建模型支持版本历史记录的极简方法,并且回滚到指定版本非常简单。 特点Kee laravel可版本化:stopwatch:使Laravel模型可版本化。 这是创建模型支持...

    delphi TStopwatch 计时

    Stopwatch: TStopwatch; begin Stopwatch := TStopwatch.Create; try // 启动计时器 Stopwatch.Start; // 这里放置你的代码,例如一个长时间运行的操作 Sleep(1000); // 模拟1秒的等待 // 停止计时器并...

    go-stopwatch:一个简单的秒表来测量、获取和记录经过的时间

    基本用法: 启动新的秒表,做完事情后得到经过的时间并重新启动秒表 stopwatch := stopwatch . Stopwatch ()// do stuffelapsed := stopwatch . Get ()获取已用时间得到Get 返回已用时间作为 time.Duration。 ...

    Visual C++源代码 26 如何使用Stopwatch实现高精度计时

    Visual C++源代码 26 如何使用Stopwatch实现高精度计时Visual C++源代码 26 如何使用Stopwatch实现高精度计时Visual C++源代码 26 如何使用Stopwatch实现高精度计时Visual C++源代码 26 如何使用Stopwatch实现高精度...

    Java计时新姿势StopWatch详解

    StopWatch的使用非常简单,只需要引入Spring核心包,并创建一个StopWatch对象,然后使用start()方法开始计时,stop()方法停止计时,最后使用prettyPrint()方法将计时结果输出。 StopWatch的优点在于它可以对多个...

    stopwatch:tic/toc 的简单 GUI。 多个秒表实例可以并行运行。-matlab开发

    秒表以 0.01 秒的分辨率运行,精度为 +/- 0.005 秒——嗯,实际上这里不涉及实时性,所以简单地忘记准确性。 控制: * 左键单击 ...........显示当前值,计时器在后台继续(右键单击/修改键可再次显示当前计时器计数)

    秒表计时器 多次计时

    而“stopwatch”可能是秒表计时器的可执行文件或者程序名称,用户可以通过运行这个文件来启动计时器。 总的来说,具备多次计时功能的秒表计时器是一个高效且灵活的工具,能够帮助用户准确地管理时间,提高生活和...

    Stopwatch:用 Lua 为 Corona SDK 构建的秒表

    elapsedTimeText.text = string.format("%.2f", stopwatch:getTime()).." 秒" end, 0) -- 每100毫秒更新一次 ``` 这样,我们就创建了一个简单的秒表功能,包括开始、停止和重置。这个秒表能够与 Corona SDK 的显示...

    Stopwatch:Android秒表应用

    本项目标题为"Stopwatch: Android秒表应用",描述简称为"跑表",表明这是一个基于Java语言实现的Android应用,旨在提供简单易用的秒表功能。 在Android应用开发中,`Stopwatch`通常是一个自定义的UI组件,用于显示...

    Stopwatch:易于使用的简单基准测试工具

    跑表 易于使用的简单基准测试工具。 将UDP数据包发送到localhost,StopwatchViewer接收该UDP数据包并显示其统计... Stopwatch::getInstance (). setCustomSignature ( 32434 ); STOPWATCH ( " Timing1 " , if (ar

    Simple Timer Stopwatch:一个简单的计时器秒表。-开源

    【标题】"Simple Timer Stopwatch:一个简单的计时器秒表。-开源" 这个项目是一个基于Qt框架用C++编写的计时器秒表应用。它专注于提供基础的计时功能,没有其他复杂或额外的特性,因此非常适合那些追求简洁、无干扰...

    CSharp 4.0 .Net Framework V4.0 Stopwatch 类

    如果硬件和操作系统支持高性能计数器,`Stopwatch` 将使用它,否则将退化为使用系统计时器。`Frequency` 字段表示每秒钟的计时周期数,而 `IsHighResolution` 表示计时器是否具有高精度。 在实际使用中,通常先调用...

    motogymkhana_stopwatch:motojimkhana的起停计时器

    motojimkhana的起停计时器 电气图 组件清单 传感器 Arduino纳米 电池 DC-DC降压 LED面板 需要一个原型板,要组装什么,一个由12V控制的继电器,2个按钮,3个10k的电阻器 计时器在它第一次通过传感器线时启动,...

    Matlab的GUI秒表秒表计时器-stopwatch.m

    Matlab的GUI秒表秒表计时器-stopwatch.m 程序是基于matlab7.0编写的,贴出来希望有所帮助!呵呵~ 程序: stopwatch.m 实现程序 程序界面 秒表计时器.jpg 程序界面

    Stopwatch Using JavaScript.zip

    在JavaScript编程中,Stopwatch是一个常见的功能,常用于创建计时器或倒计时器,例如在游戏或者体育赛事中追踪时间。这个压缩包"Stopwatch Using JavaScript.zip"包含了一个简单的JavaScript停止计时器实现,它由三...

Global site tag (gtag.js) - Google Analytics