小编这次要给大家分享的是如何使用弹簧计时器秒表,文章内容丰富,感兴趣的小伙伴可以来了解一下,希望大家阅读完这篇文章之后能够有所收获。
秒表是位于org.springframework.util包下的一个工具类,通过它可方便的对程序部分代码进行计时(ms级别),适用于同步单线程代码块。
正常情况下,我们如果需要看某段代码的执行耗时,会通过如下的方式进行查看:
公共静态void main (String [] args)抛出InterruptedException { StopWatchTest.test0 ();//StopWatchTest.test1 (); } 公共静态无效电平()抛出InterruptedException { 长开始=System.currentTimeMillis ();//做某事 thread . sleep (100); 长债=System.currentTimeMillis (); 长start2=System.currentTimeMillis ();//做某事 thread . sleep (200); 长end2=System.currentTimeMillis (); System.out.println(“某某1执行耗时:“+(结束-开始)); System.out.println(“某某2执行耗时:“+ (end2 - start2)); }前>运行结果:
引用>
某某1执行耗时:105
某某2执行耗时:203
该种方法通过获取执行完成时间与执行开始时间的差值得到程序的执行时间,简单直接有效,但想必写多了也是比较烦人的,尤其是碰到不可描述的代码时,会更加的让人忍不住多写几个bug聊表敬意,而且该结果也不够直观,此时会想是否有一个工具类,提供了这些方法,或者自己写个工具类,刚好可以满足这种场景,并且把结果更加直观的展现出来。
,首先我们的需求如下:<李>记录开始时间点李> <>李记录结束时间点李> <李>输出执行时间及各个时间段的占比
李,>根据该需求,我们可直接使用org.springframework。util包下的一个工具类秒表,通过该工具类,我们对上述代码做如下改造:
公共静态void main (String [] args)抛出InterruptedException {//StopWatchTest.test0 (); StopWatchTest.test1 (); } 公共静态孔隙test1()抛出InterruptedException { 秒表sw=new秒表(“test"); sw.start (“task1");//做某事 thread . sleep (100); sw.stop (); sw.start (“task2");//做某事 thread . sleep (200); sw.stop (); System.out.println (“sw.prettyPrint () ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~“); System.out.println (sw.prettyPrint ()); }运行结果:
引用>
sw.prettyPrint () ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
秒表& # 39;测试# 39;:运行时间(飞船)=308
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
小姐,,,%,,,,任务名称
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
00104,034%,task1
00204,066%,task2
开始开始记录,停止停止记录,然后通过秒表的prettyPrint方法,可直观的输出代码执行耗时,以及执行时间百分比,瞬间感觉比之前的方式高大上了一个档次。
除此之外,还有以下两个方法shortSummary, getTotalTimeMillis,查看程序执行时间。
运行代码及结果:
System.out.println (“sw.shortSummary () ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~“); System.out.println (sw.shortSummary ()); System.out.println (“sw.getTotalTimeMillis () ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~“); System.out.println (sw.getTotalTimeMillis ());运行结果
引用>
sw.shortSummary () ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
秒表& # 39;测试# 39;:运行时间(飞船)=308
sw.getTotalTimeMillis () ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
308
其实以上内容在该工具类中实现也极其简单,通过启动与停止方法分别记录开始时间与结束时间,其中在记录结束时间时,会维护一个链表类型的tasklist属性,从而使该类可记录多个任务,最后的输出也仅仅是对之前记录的信息做了一个统一的归纳输出,从而使结果更加直观的展示出来。
<强>秒表优缺点:强>
优点:
<李>春自带工具类,可直接使用李> <>李代码实现简单,使用更简单李> <李>统一归纳,展示每项任务耗时与占用总时间的百分比,展示结果直观李> <>李性能消耗相对较小,并且最大程度的保证了启动与停止之间的时间记录的准确性李> <李>可在开始时直接指定任务名字,从而更加直观的显示记录结果李>
缺点:
<李>一个秒表实例一次只能开启一个任务,不能同时开始多个任务,并且在该任务未停止之前不能启动一个新任务的,必须在该任务停止之后才能开启新的任务,若要一次开启多个,需要新不同的秒表实例李
如何使用弹簧计时器秒表