在日常寫代碼的過程中,通常會記錄某一段程序的運行時間,使用的方式是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"); }
執行結果如下: