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");
    }

執行結果如下:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM