,,Java计时新姿势StopWatch的使用方法详解

,,Java计时新姿势StopWatch的使用方法详解

本文主要介绍java新推出的计时姿势秒表的相关信息,以及在Java中使用秒表计算时差的方法。对你的学习或者工作有一定的参考价值,有需要的朋友可以参考一下。

一.背景二spring用法2.1初遇2.2源代码2.3注释三。阿帕奇用法IV。用java中的秒表计算时差v .最后

目录

有时候我们在做开发的时候,需要记录每个任务的执行时间或者一段代码的执行时间。最简单的方法是打印当前时间和执行时间之间的差值。通常,我们通过以下方式检测一段代码的执行时间:

公共静态void main(String[] args) {

long start time=system . current time millis();

//您的业务代码

long end time=system . current time millis();

long elapsed time=(end time-start time)/1000;

System.out.println('在此段中花费的总时间:' elapsed time ' s ');

}

这种方法其实是通过获取执行完成时间和执行开始时间的差值来得到程序的执行时间,简单直接有效,但是写多了肯定很烦,尤其是遇到无法描述的代码,会让人更想写更多的bug来表示敬意,而如果想进一步控制执行时间,就需要在程序中很多地方进行修改。此时,我想知道是否有一个工具类提供这些方法,只是为了满足这种场景?我们可以在现有的工具类中使用秒表。常见的秒表工具类有org.springframework.util.StopWatchorg.apache.commons.lang.time.StopWatch和Google提供的番石榴语的秒表(这个我没怎么用过)。这里我们将重点介绍spring和Apache的使用。

一、背景

二、spring 用法

StopWatch是一个工具类,位于org.springframework.util包下,可以方便地对一些程序代码进行计时(ms级),适用于同步单线程代码块。综上所述,Spring提供的计时器秒表支持以秒、毫秒为单位方便计时的程序的时间特性的统计输出,尤其是单线程、顺序执行的程序。也就是说,如果我们手里有几个按顺序执行的任务,我们更在意每个任务的时间占用,我们希望形成一个不那么复杂的日志输出。秒表就提供了这样的功能。而且Spring的秒表基本上只为这样的功能实现。

要使用它,首先您需要将Spring核心包引入到您的Maven中。当然,Spring MVC和Spring Boot都自动引入了这个包:

!-https://mvn repository . com/artifact/org . spring framework/spring-core-

属国

groupIdorg.springframework/groupId

artifactId spring-core/artifactId

版本${spring.version}/version

/依赖关系

对任何事物的认知都是从使用开始的,所以我们先来看看它的用法,大概会有以下几种:

公共静态void main(String[] args)引发InterruptedException {

秒表秒表=新秒表();

//任务1模拟睡眠3秒

stopwatch . start(' TaskOneName ');

thread . sleep(1000 * 3);

System.out.println('当前任务名:' stopwatch . current taskname());

秒表. stop();

//任务1模拟睡眠10秒

stopwatch . start(' task two name ');

thread . sleep(1000 * 10);

System.out.println('当前任务名:' stopwatch . current taskname());

秒表. stop();

//任务1模拟睡眠10秒

stopwatch . start(' task three name ');

thread . sleep(1000 * 10);

System.out.println('当前任务名:' stopwatch . current taskname());

秒表. stop();

//打印出来需要时间

system . out . println(stopwatch . pretty print());

system . out . println(stopwatch . short summary());

//停止后其值为null。

system . out . println(stopwatch . current task name());

//关于上一个任务的信息

system . out . println(stopwatch . getlastaskname());

system . out . println(stopwatch . getlastaskinfo());

//总任务时间。如果你想得到每个任务的详细信息(包括它的任务名称,时间等。),就可以用了

System.out.println('所有任务的总时间:' SW . gettotaltimemillis());

System.out.println('任务总数:' SW . gettaskcount());

System.out.println('所有任务详情:' SW . gettaskinfo());

}

如图,秒表不仅正确记录了最后一个任务的执行时间,还在最后给出了准确的任务执行时间(纳秒级)和耗时比例,可能比我们自己输出的还要优雅一点。

2.1 初遇

像往常一样,由浅入深。看完用法,我们来看看源代码。我们来看看构成秒表的属性。

公共类秒表{

/**

*此实例的唯一Id,用于在日志或控制台输出期间区分它。

*/

私有最终字符串id;

/**

*是否保留taskList链表?

*每次停止计时,当前任务都会放入这个链表中,记录任务链接和计时分析。

*/

private boolean keepTaskList=true;

/**

*任务链表

* task info用于存储每个任务的信息,由taskName和totoalTime组成。

*/

私人最终列表秒表。TaskInfo任务列表;

/**

*当前任务的开始时间

*/

private long startTimeMillis

/**

*

*/

私有布尔运行;

/**

*当前任务名称

*/

私有字符串currentTaskName

/**

*最后一个任务的信息

*/

私人秒表。TaskInfo lastTaskInfo

/**

*任务总数

*/

private int taskCount

/**

*程序执行时间

*/

private long totalTimeMillis

.

}

接下来,我们来看看秒表类的构造函数和一些关键方法。

方法描述new StopWatch()在不开始任何任务的情况下建立新的秒表。new StopWatch(String id)用指定的id创建一个秒表String getId()。归还这个秒表的IDvoid start(String taskName)。没有参数传入,并启动一个无名称的任务计时器。传入一个字符串参数启动指定任务名称的任务计时void stop()停止当前任务计时boolean isRunning()任务是否正在计时String currentTaskName()当前运行任务的名称(如果有)long getTotalTimeMillis()所有任务的总执行时间(毫秒)double getTotalTimeSeconds()所有任务的总时间(秒)String getLastTaskName()上一个任务的名称long getLastTaskTimeMillis()上一个任务的时间消耗

2.2 源码

秒表对象不是为线程安全而设计的,并且不使用同步。秒表实例一次只能打开一个任务,不能同时启动多个任务。在任务停止之前,您不能开始新任务,并且只能在任务停止之后开始新任务。停止打开多个任务一次,你需要一个新的和不同的秒表实例。

2.3 注意事项

StopWath是包int getTaskCount()下的一个任务执行时间监视器,类似于我们通常的秒表的行为。让我们来看看一些重要的方法:

方法描述String shortSummary()在不开始任何任务的情况下建立新的秒表。String prettyPrint()apache commons lang3开始计时new StopWatch()当前任务的停止计时static StopWatch createStarted()重置计时void start()设置拆分点void stop()void reset()暂停计时,直到调用resume()时时间才恢复void split()。时间恢复void unsplit()。从拆分到现在的时间统计void suspend()void resume()long getTime()long getTime(final TimeUnit timeUnit)long getNanoTime()long getSplitTime()long getSplitNanoTime()

!-https://mvn repository . com/artifact/org . Apache . commons/commons-lang 3-

属国

groupId org . Apache . commons/groupId

artifactId commons-lang 3/artifactId

版本3.6/版本

/依赖关系

Apache提供的任务执行监视器功能丰富,强大而灵活,如下:

公共静态void main(String[] args)引发InterruptedException {

//创建后立即启动,常用

秒表手表=StopWatch . create started();

//秒表手表=新秒表();

//watch . start();

thread . sleep(1000);

system . out . println(watch . gettime());

System.out.println('统计从开始到现在的运行时间:' watch . gettime()' ms ');

thread . sleep(1000);

watch . split();

System.out.println('从开始到这一刻的时间:' 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秒');

线程.睡眠(2000年);

//暂停上面,如果这里要重新计数,需要恢复。

手表. resume();

System.out.println('恢复后的执行时间为:' watch . gettime());

thread . sleep(1000);

watch . stop();

system . out . println(' Time Spent ' ' watch . gettime()' ms ');

//直接转换为s

system . out . println(' time spent ' ' watch . gettime(时间单位.秒)' s ');

}

三、apache 用法

以前在消耗时间的时候,我们一般会给出计算前后的时间值,然后通过参考细节来计算经过的时间。

例如:

long start=system . current time millis();

.业务处理

system . out . println(' time-consumption:'(system . current time millions()-start)' ms ');

我们可以在现有的工具类中使用秒表来代替上面的用法。现有的秒表工具类包括org。springframework.util.stopwatch,org。Apache . commons . lang . time . stopwatch这里以Spring的秒表类为例:

公共静态void main(String[] args)引发InterruptedException{

秒表秒表=新秒表(“消耗任务的秒表工具”);

stopwatch . start(“task 1”);

thread . sleep(1000);

秒表. stop();

system . out . println(stopwatch . gettotaltimemillis());

stopwatch . start(' task 2 ');

thread . sleep(3000);

秒表. stop();

//所有任务都需要时间

system . out . println(stopwatch . gettotaltimemillis());

system . out . println(stopwatch . pretty print());

秒表秒表2=新秒表('任务耗时秒表工具2 ');

stop watch 2 . start(' task 3 ');

thread . sleep(3000);

stop watch 2 . stop();

//所有任务都需要时间

system . out . println(stop watch 2 . gettotaltimemillis());

system . out . println(stop watch 2 . pretty print());

}

四、java 中使用StopWatch来计算时间差

很多时候,写代码也是一门艺术,借助这个实用的工具,我觉得更有艺术感。我们希望自己能有追求更好的东西的心,这对于接受新知识尤为重要。这里推荐这个监视器代替之前的使用,可以让朋友更灵活的分析你的代码~

这就是这篇关于使用Java计时的新姿势秒表的文章。有关Java计时秒表的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: