Java使用Apache Commons Lang StopWatch计算经过时间
您需要计算代码执行的时间或经过的时间,以便知道特定方法或某些代码块完成其执行所花费的时间。您可以通过使用捕获开始时间和结束时间System.currentTimeMillis()并找到它们之间的差异来做到这一点 。另一种方法是使用StopWatchApacheCommonsLang库中的类。本StopWatch类可以在找到 org.apache.commons.lang.time包。
使用的最简单步骤StopWatch是创建StopWatch该类的实例,通过调用start()方法启动秒表。秒表启动后,您可以执行要观看的目标方法或代码块,然后调用该stop()方法以完成计时会话。要获取秒表的时间,可以调用getTime()方法。
现在,让我们看一下上述过程的代码。
package org.nhooo.example.commons.lang; import org.apache.commons.lang3.time.StopWatch; public class StopWatchExample { public static void main(String[] args) { StopWatchExample demo = new StopWatchExample(); demo.timingOne(); } private void timingOne() { //创建一个StopWatch实例。 StopWatch stopWatch = new StopWatch(); //启动手表,执行一些任务,然后停止手表。 stopWatch.start(); doSomeTask(5000); stopWatch.stop(); //打印出手表的总时间 System.out.println("Time: " + stopWatch.getTime()); } private void doSomeTask(long sleep) { try { Thread.sleep(sleep); } catch (InterruptedException e) { e.printStackTrace(); } } }
这是上面代码的输出:
Time: 5000
除了使用start()和stop()之后执行getTime()方法进行简单的计时计算外,StopWatch该类还提供了拆分时间,暂停和恢复秒表的方法。您可以使用split(),suspend()并resume()分别方法。要获取中途时间,您可以调用toSplitString()方法。
package org.nhooo.example.commons.lang; import org.apache.commons.lang3.time.StopWatch; public class StopWatchAnotherExample { public static void main(String[] args) { StopWatchAnotherExample demo = new StopWatchAnotherExample(); demo.timingTwo(); } private void timingTwo() { //创建一个StopWatch实例并启动秒表。 StopWatch stopWatch = new StopWatch(); stopWatch.start(); //做一些任务并分配秒表时间。 doSomeTask(3000); stopWatch.split(); System.out.println("Split 1: " + stopWatch.toSplitString()); //暂停秒表并恢复秒表。 stopWatch.suspend(); doSomeTask(4000); stopWatch.resume(); //做一些任务并分配秒表时间。 doSomeTask(2500); stopWatch.split(); System.out.println("Split 2: " + stopWatch.toSplitString()); //做一些任务并分配秒表时间。 doSomeTask(1000); stopWatch.split(); System.out.println("Split 3: " + stopWatch.toSplitString()); //停止秒表和总执行时间。 stopWatch.stop(); System.out.println("Time: " + stopWatch.getTime()); } private void doSomeTask(long sleep) { try { Thread.sleep(sleep); } catch (InterruptedException e) { e.printStackTrace(); } } }
上面的代码片段将输出如下内容:
Split 1: 00:00:03.004 Split 2: 00:00:05.518 Split 3: 00:00:06.522 Time: 6522
您可以在StopWatch该类中找到的另一种方法是getStartTime(),它将返回秒表的开始时间。该reset()方法将重置秒表。要删除拆分,可以调用unsplit()方法。
Maven依赖
<!-- https://search.maven.org/remotecontent?filepath=org/apache/commons/commons-lang3/3.9/commons-lang3-3.9.jar --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.9</version> </dependency>