Java使用Apache Commons Lang StopWatch计算经过时间

您需要计算代码执行的时间或经过的时间,以便知道特定方法或某些代码块完成其执行所花费的时间。您可以通过使用捕获开始时间和结束时间System.currentTimeMillis()并找到它们之间的差异来做到这一点 。另一种方法是使用StopWatchApache Commons Lang库中的类。本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>

Maven中央