java记录程序执行时间之StopWatch

在日常写代码的过程中,通常会记录某一段程序的运行时间,使用的方式是System.currentTimeMillis()。

Spring也自带了一种方式StopWatch,使用起来也比较简单。

共分为四步:创建对象,开始记录执行时间,结束记录执行时间,获取执行的总时间。

package com.zys.example;

import org.springframework.util.StopWatch;

import java.util.ArrayList;
import java.util.List;

public class AppMain {
    public static void main(String[] args) {
        StopWatch watch = new StopWatch();
        watch.start();
        List<String> list = new ArrayList<>();
        for (int i = 0; i < 100000; i++) {
            list.add("哈哈" + (i + 1));
        }
        watch.stop();
        System.out.println("用时(ms):" + watch.getTotalTimeMillis());//26
    }


}

上述代码是记录向集合中插入10万条数据所需要的时间,最后打印的结果是26ms,此时间是不固定的。相比于System.currentTimeMillis()无需计算两个时间差,显得更为方便。

除此之外,还可以记录多个任务一共执行的时间,需要指定任务名称:

public static void main(String[] args) throws InterruptedException {
        StopWatch watch = new StopWatch();
        watch.start("task1");
        Thread.sleep(200);
        watch.stop();
        watch.start("task2");
        Thread.sleep(5000);
        watch.stop();
        watch.start("task3");
        Thread.sleep(10);
        watch.stop();
        System.out.println("任务数用时:" + watch.getTotalTimeMillis() + " ms");
        System.out.println("任务数:" + watch.getTaskCount());
        System.out.println("任务执行的百分比:" + watch.prettyPrint());
    }

执行结果如下:

除了需要记录总用时外,还可以记录每个任务耗时时间,调用getLastTaskTimeMillis方法即可:

    public static void main(String[] args) throws InterruptedException {
        Long t1, t2, t3;
        StopWatch watch = new StopWatch();
        watch.start("task1");
        Thread.sleep(200);
        watch.stop();
        t1 = watch.getLastTaskTimeMillis();
        watch.start("task2");
        Thread.sleep(5000);
        watch.stop();
        t2 = watch.getLastTaskTimeMillis();
        watch.start("task3");
        Thread.sleep(10);
        watch.stop();
        t3 = watch.getLastTaskTimeMillis();
        System.out.println("任务task1用时:" + t1 + " ms");
        System.out.println("任务task2用时:" + t2 + " ms");
        System.out.println("任务task3用时:" + t3 + " ms");
        System.out.println("任务数用时:" + watch.getTotalTimeMillis() + " ms");
    }

执行结果如下:

posted @ 2022-01-25 21:46  钟小嘿  阅读(2113)  评论(0编辑  收藏  举报