用StopWatch優雅替代currentTimeMillis計算程序執行耗時

需求

有時需要記錄程序執行時間,最簡單就是打印當前時間與執行完時間的差值,缺點是:

  • 執行大量測試的話就很麻煩
  • 不直觀
  • 如果想對執行的時間做進一步控制,則需要在程序中很多地方修改

於是 Spring提供瞭一個StopWatch類可以做類似任務執行時間控制,即封裝瞭一個對開始時間,結束時間記錄工具

案例

統計輸出總耗時

import org.springframework.util.StopWatch;
 
public class SpringStopWatchExample {
 
    public static void main (String[] args) throws InterruptedException {
        StopWatch sw = new StopWatch();
        sw.start();
        //long task simulation
        Thread.sleep(1000);
        sw.stop();
        System.out.println(sw.getTotalTimeMillis());
    }
}

輸出最後一個任務的耗時

public class SpringStopWatchExample2 {
 
    public static void main (String[] args) throws InterruptedException {
        StopWatch sw = new StopWatch();
        sw.start("A");//setting a task name
        //long task simulation
        Thread.sleep(1000);
        sw.stop();
        System.out.println(sw.getLastTaskTimeMillis());
    }
}

以優雅的格式打出所有任務的耗時以及占比

import org.springframework.util.StopWatch;
 
public class SpringStopWatchExample3 {
 
    public static void main (String[] args) throws InterruptedException {
        StopWatch sw = new StopWatch();
        sw.start("A");
        Thread.sleep(500);
        sw.stop();
        sw.start("B");
        Thread.sleep(300);
        sw.stop();
        sw.start("C");
        Thread.sleep(200);
        sw.stop();
        System.out.println(sw.prettyPrint());
    }
}

序列服務輸出耗時信息

@Override
public long nextSeq(String name) {
    StopWatch watch = new StopWatch();
    watch.start("單序列獲取總消耗");
    long sequence = generator.generateId(name);
    watch.stop();
    logger.info(watch.prettyPrint());
    return sequence;
}

getTotalTimeSeconds() 獲取總耗時秒,同時也有獲取毫秒的方法
prettyPrint() 優雅的格式打印結果,表格形式
shortSummary() 返回簡短的總耗時描述
getTaskCount() 返回統計時間任務的數量
getLastTaskInfo().getTaskName() 返回最後一個任務TaskInfo對象的名稱

到此這篇關於用StopWatch優雅替代currentTimeMillis計算程序執行耗時的文章就介紹到這瞭,更多相關Java StopWatch內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: