咱們能夠利用已有的工具類中的秒錶,常見的秒錶工具類有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實例。
- 代碼侵入式使用,須要改動多處代碼