您的位置 首页 > 德语词汇

stopwatch是什么意思 StopWatch统计耗时

大家好,今天给各位分享stopwatch是什么意思的一些知识,其中也会对StopWatch统计耗时进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在就马上开始吧!

stopwatch是什么意思 StopWatch统计耗时

?StopWatch是位于org.springframework.util包下的一个工具类,通过它可方便的对程序部分代码进行计时(ms级别),适用于同步单线程代码块。简单总结一句,Spring提供的计时器StopWatch对于秒、毫秒为单位方便计时的程序,尤其是单线程、顺序执行程序的时间特性的统计输出支持比较好。也就是说假如我们手里面有几个在顺序上前后执行的几个任务,而且我们比较关心几个任务分别执行的时间占用状况,希望能够形成一个不太复杂的日志输出,StopWatch提供了这样的功能。而且Spring的StopWatch基本上也就是仅仅为了这样的功能而实现。

??想要使用它,首先你需要在你的Maven中引入Spring核心包,当然SpringMVC和SpringBoot都已经自动引入了该包:

publicstaticvoidmain(String[]args)throwsInterruptedException{StopWatchstopWatch=newStopWatch();//任务一模拟休眠3秒钟stopWatch.start("TaskOneName");Thread.sleep(1000*3);System.out.println("当前任务名称:"+stopWatch.currentTaskName());stopWatch.stop();//任务一模拟休眠10秒钟stopWatch.start("TaskTwoName");Thread.sleep(1000*10);System.out.println("当前任务名称:"+stopWatch.currentTaskName());stopWatch.stop();//任务一模拟休眠10秒钟stopWatch.start("TaskThreeName");Thread.sleep(1000*10);System.out.println("当前任务名称:"+stopWatch.currentTaskName());stopWatch.stop();//打印出耗时System.out.println(stopWatch.prettyPrint());System.out.println(stopWatch.shortSummary());//stop后它的值为nullSystem.out.println(stopWatch.currentTaskName());//最后一个任务的相关信息System.out.println(stopWatch.getLastTaskName());System.out.println(stopWatch.getLastTaskInfo());//任务总的耗时如果你想获取到每个任务详情(包括它的任务名、耗时等等)可使用System.out.println("所有任务总耗时:"+sw.getTotalTimeMillis());System.out.println("任务总数:"+sw.getTaskCount());System.out.println("所有任务详情:"+sw.getTaskInfo());}

??如图所示,StopWatch不仅正确记录了上个任务的执行时间,并且在最后还可以给出精确的任务执行时间(纳秒级别)和耗时占比,这或许就会比我们自己输出要优雅那么一些。

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

newStopWatch()

构建一个新的秒表,不开始任何任务。

newStopWatch(Stringid)

StringgetId()

voidstart(StringtaskName)

不传入参数,开始一个无名称的任务的计时。传入String类型的参数来开始指定任务名的任务计时

booleanisRunning()

StringcurrentTaskName()

当前正在运行的任务的名称(如果有)

longgetTotalTimeMillis()

所有任务的总体执行时间(毫秒单位)

doublegetTotalTimeSeconds()

所有任务的总时间(以秒为单位)

StringgetLastTaskName()

longgetLastTaskTimeMillis()

intgetTaskCount()

StringshortSummary()

StringprettyPrint()

优美地打印所有任务的详细耗时情况

??StopWath是apachecommonslang3包下的一个任务执行时间监视器,与我们平时常用的秒表的行为比较类似,我们先看一下其中的一些重要方法:

newStopWatch()

构建一个新的秒表,不开始任何任务。

staticStopWatchcreateStarted()

voidunsplit()

voidsuspend()

暂停计时,直到调用resume()后才恢复计时

longgetTime()

longgetTime(finalTimeUnittimeUnit)

longgetNanoTime()

longgetSplitTime()

获取从start到最后一次split的时间

longgetSplitNanoTime()

longgetStartTime()

booleanisStarted()

booleanisSuspended()

booleanisStopped()

??Apache提供的这个任务执行监视器功能丰富强大,灵活性强,如下经典实用案例:

publicstaticvoidmain(String[]args)throwsInterruptedException{//创建后立即start,常用StopWatchwatch=StopWatch.createStarted();//StopWatchwatch=newStopWatch();//watch.start();Thread.sleep(1000);System.out.println(watch.getTime());System.out.println("统计从开始到现在运行时间:"+watch.getTime()+"ms");Thread.sleep(1000);watch.split();System.out.println("从start到此刻为止的时间:"+watch.getTime());System.out.println("从开始到第一个切入点运行时间:"+watch.getSplitTime());Thread.sleep(1000);watch.split();System.out.println("从开始到第二个切入点运行时间:"+watch.getSplitTime());//复位后,重新计时watch.reset();watch.start();Thread.sleep(1000);System.out.println("重新开始后到当前运行时间是:"+watch.getTime());//暂停与恢复watch.suspend();System.out.println("暂停2秒钟");Thread.sleep(2000);//上面suspend,这里要想重新统计,需要恢复一下watch.resume();System.out.println("恢复后执行的时间是:"+watch.getTime());Thread.sleep(1000);watch.stop();System.out.println("花费的时间》》"+watch.getTime()+"ms");//直接转成sSystem.out.println("花费的时间》》"+watch.getTime(TimeUnit.SECONDS)+"s");}

如果你还想了解更多这方面的信息,记得收藏关注本站。

本站涵盖的内容、图片、视频等数据,部分未能与原作者取得联系。若涉及版权问题,请及时通知我们并提供相关证明材料,我们将及时予以删除!谢谢大家的理解与支持!

Copyright © 2023