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>