编程语言
首页 > 编程语言> > 「其他」Java中的计时器StopWatch

「其他」Java中的计时器StopWatch

作者:互联网

业务代码或者算法性能一直是我们重要的关注点之一。而衡量性能的重要指标之一就是时间复杂度。我们除了用大O表示法外,有时还需要直观地通过程序的实际运行时间衡量算法的性能。今天我们就介绍一下在计时方面十分重要的工具类StopWatch

StopWatch是不在java标准包中的,你可以在以下两个程序包中找到StopWatch工具类:

Apache Commons Lang中的StopWatch

Apache Commons Lang中的StopWatch与我们平时常用的秒表的行为比较类似,我们先看一下其中的一些重要方法:

示例代码:

import org.apache.commons.lang3.time.StopWatch;
import org.junit.Test;
​
import java.util.concurrent.TimeUnit;
public class StopWatchTest {
    @Test
    public void testStopWatch() throws InterruptedException {
        StopWatch stopWatch = new StopWatch();
        sleepOneSecondAndGetStopWatchReading(stopWatch);
        stopWatch.start();
        sleepOneSecondAndGetStopWatchReading(stopWatch);
        stopWatch.stop();
        sleepOneSecondAndGetStopWatchReading(stopWatch);
        stopWatch.reset();
        sleepOneSecondAndGetStopWatchReading(stopWatch);
        stopWatch.start();
        sleepOneSecondAndGetStopWatchReading(stopWatch);
        stopWatch.split();
        sleepOneSecondAndGetStopWatchReading(stopWatch);
        stopWatch.split();
        sleepOneSecondAndGetStopWatchReading(stopWatch);
        stopWatch.unsplit();
        sleepOneSecondAndGetStopWatchReading(stopWatch);
        stopWatch.split();
        System.out.println("Last Split time :"+stopWatch.getSplitTime()+" ms");
        System.out.println(stopWatch.toSplitString());
        System.out.println(stopWatch.toString());
    }
    
    private void sleepOneSecondAndGetStopWatchReading(StopWatch stopWatch) throws InterruptedException {
        Thread.sleep(1000);
        System.out.println("StopWatch Time: "+stopWatch.getTime(TimeUnit.MILLISECONDS)+"ms");
    }
}

Spring Framework中的StopWatch

相比于Apache Commons Lang中的StopWatch,Spring Framework中的StopWatch提供了额外的任务计时功能:不仅可以统计单个任务时间,还可以优雅地打印出多个任务的详细耗时情况。

我们先看一下StopWatch类的构造器和一些关键方法:

示例代码:

public static void main(String[] args) {
    StopWatch stopWatch = new StopWatch();
    for (int i=0;i<10;i++){
        stopWatch.start("Task"+i);
        //Some Real Business Logic
        stopWatch.stop();
    }
    stopWatch.prettyPrint();
}

代码中启动并在真正的业务逻辑完成后分别停止了十个任务的计时,最终我们可以通过prettyPrint方法来获得详细的任务执行耗时情况。

 

标签:Java,stopWatch,计时器,split,计时,StopWatch,秒表,sleepOneSecondAndGetStopWatchReading
来源: https://www.cnblogs.com/xfeiyun/p/16408340.html