Spring計時器StopWatch使用

咱們能夠利用已有的工具類中的秒錶,常見的秒錶工具類有org.springframework.util.StopWatch、org.apache.commons.lang.time.StopWatch以及谷歌提供的guava中的秒錶。spring

下面用Spring的StopWatch演示下耗時統計及打印的功能:apache

    public static void main(String[] args) {
        StopWatch sw = new StopWatch("test");
        try {
            //啓動任務一
            sw.start("任務一");
            TimeUnit.SECONDS.sleep(1);
            sw.stop();
            
            //啓動任務二
            sw.start("任務二");
            TimeUnit.SECONDS.sleep(3);
            sw.stop();
            System.out.println(sw.prettyPrint());
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

結果打印:工具

StopWatch 'test': running time (millis) = 4006
-----------------------------------------
ms     %     Task name
-----------------------------------------
01006  025%  任務一
03000  075%  任務二

start開始記錄,stop中止記錄,而後經過StopWatch的prettyPrint方法,可直觀的輸出代碼執行耗時,以及執行時間百分比。性能

其實以上內容在該工具類中實現也極其簡單,經過start與stop方法分別記錄開始時間與結束時間,其中在記錄結束時間時,會維護一個鏈表類型的tasklist屬性,從而使該類可記錄多個任務,最後的輸出也僅僅是對以前記錄的信息作了一個統一的概括輸出,從而使結果更加直觀的展現出來。spa

StopWatch優缺點:

優勢:code

  • spring自帶工具類,可直接使用
  • 代碼實現簡單,使用更簡單
  • 統一概括,展現每項任務耗時與佔用總時間的百分比,展現結果直觀
  • 性能消耗相對較小,而且最大程度的保證了start與stop之間的時間記錄的準確性
  • 可在start時直接指定任務名字,從而更加直觀的顯示記錄結果

缺點:blog

  • 一個StopWatch實例一次只能開啓一個task,不能同時start多個task,而且在該task未stop以前不能start一個新的task,必須在該task stop以後才能開啓新的task,若要一次開啓多個,須要new不一樣的StopWatch實例。
  • 代碼侵入式使用,須要改動多處代碼
相關文章
相關標籤/搜索