上善若水
          In general the OO style is to use a lot of little objects with a lot of little methods that give us a lot of plug points for overriding and variation. To do is to be -Nietzsche, To bei is to do -Kant, Do be do be do -Sinatra
          posts - 146,comments - 147,trackbacks - 0
            1/**
            2 * 在C#中提供了一個專門用于簡單測試運行時間的類StopWatch,
            3 * 但是貌似JDK中并沒有提供這樣的類,既然沒有提供,那么自己動手豐衣足食了。
            4 * 參考網上代碼,簡單寫了一個。
            5 * 
            6 * 后來查了以下,貌似commons-lang中已經提供了一個StopWatch的類了,
            7 * 而且那個類的功能寫的更完善一些,這個類就當是一個學習的漸進過程了。
            8 * 
            9 * @author levin
           10 * @since 2011-07-07
           11 */

           12public class StopWatch {
           13    private long startTime;
           14    private long endTime;
           15    private boolean isRunning;
           16    
           17    /**
           18     * 構造{@link #StopWatch}實例,清除所有狀態
           19     */

           20    public StopWatch() {
           21        reset();
           22    }

           23    
           24    /**
           25     * 調用{@link #start()}以開始計時,調用該方法時,確保{@link #StopWatch}是沒有處于運行狀態,
           26     * 即{@link #start()}方法還未調用,或已經調用了{@link #stop()}方法。否則會拋{@link #IllegalStateException}
           27     * 
           28     * @return {@link #StopWatch}
           29     * @since 2011-07-07
           30     */

           31    public StopWatch start() {
           32        if(isRunning) {
           33            throw new IllegalStateException("StopWath is already started");
           34        }

           35        
           36        startTime = System.currentTimeMillis();
           37        endTime = -1;
           38        isRunning = true;
           39        
           40        return this;
           41    }

           42    
           43    /**
           44     * 調用{@link #stop()}方法以停止計時,調用該方法時,確保{@link #StopWatch}已經處于運行狀態,
           45     * 即已經調用{@link #start()}方法,否則會拋{@link #IllegalStateException}。
           46     * 調用該方法后,即可以使用{@link #getRunningTime()}、{@link #getRunningSecs()}方法以獲取運行時間
           47     * 
           48     * @return {@link #StopWatch}
           49     * @since 2011-07-07
           50     */

           51    public StopWatch stop() {
           52        if(isRunning) {
           53            throw new IllegalStateException("StopWatch hasn't been started yet");
           54        }

           55        
           56        endTime = System.currentTimeMillis();
           57        isRunning = false;
           58        
           59        return this;
           60    }

           61    
           62    /**
           63     * 獲取{@link #StopWatch}的運行時間,以毫秒為單位。如果還未調用{@link #stop()}方法,則返回當前時間
           64     * 和開始時間毫秒差;否則返回{@link #StopWatch}的Watch時間。
           65     * 
           66     * @return 獲取{@link #StopWatch}的運行時間,以毫秒為單位
           67     * @since 2011-07-07
           68     */

           69    public long getElapsed() {
           70        if(isRunning) {
           71            return System.currentTimeMillis() - startTime;
           72        }
           else {
           73            return endTime - startTime;
           74        }

           75    }

           76    
           77    /**
           78     * 獲取{@link #StopWatch}的運行時間,以秒為單位。其他和{@link #getElapsed()}方法類似。
           79     * 
           80     * @return 獲取{@link #StopWatch}的運行時間,以秒為單位
           81     * @since 2011-07-07
           82     */

           83    public long getElapsedSecs() {
           84        return TimeUnit.MILLISECONDS.toSeconds(getElapsed());
           85    }

           86    
           87    /**
           88     * 獲取{@link #StopWatch}的運行時間,即調用{@link #start()}到調用{@link #stop()}的時間間隔,以毫秒為單位。
           89     * 若調用此方法時,還未調用{@link #stop()}方法,則拋{@link #IllegalStateException}。
           90     * 若在調用{@link #start()}方法前調用該方法,則返回0
           91     * 
           92     * @return 獲取{@link #StopWatch}的運行時間,即調用{@link #start()}到調用{@link #stop()}的時間間隔,以毫秒為單位
           93     * @since 2011-07-07
           94     */

           95    public long getRunningTime() {
           96        if(isRunning) {
           97            throw new IllegalStateException("StopWatch hasn't been stopped yet");
           98        }

           99        
          100        return endTime - startTime;
          101    }

          102    
          103    /**
          104     * 獲取{@link #StopWatch}的運行時間,以秒為單位。其他參考{@link #getRunningTime()}方法。
          105     * 
          106     * @return 獲取{@link #StopWatch}的運行時間,以秒為單位
          107     * @since 2011-07-07
          108     */

          109    public long getRunningSecs() {
          110        return TimeUnit.MILLISECONDS.toSeconds(getRunningTime());
          111    }

          112    
          113    
          114    /**
          115     * 清除當前所有狀態
          116     * 返回{@link #StopWatch}而不是void,是為了能實用方法鏈的模式
          117     * 
          118     * @return {@link #StopWatch}
          119     * @since 2011-07-07
          120     */

          121    public StopWatch reset() {
          122        startTime = -1;
          123        endTime = -1;
          124        isRunning = false;
          125        
          126        return this;
          127    }

          128}
          posted on 2011-07-08 11:05 DLevin 閱讀(933) 評論(0)  編輯  收藏 所屬分類: CodeTools
          主站蜘蛛池模板: 广安市| 乌兰浩特市| 繁峙县| 东阳市| 山东| 双峰县| 太原市| 集贤县| 苏州市| 天全县| 晋城| 宜君县| 理塘县| 会理县| 湖北省| 桐柏县| 进贤县| 嘉善县| 莆田市| 裕民县| 昌平区| 天等县| 陈巴尔虎旗| 社旗县| 铜山县| 忻城县| 宜兴市| 邛崃市| 偏关县| 禹城市| 平罗县| 黑山县| 上思县| 迁安市| 黎川县| 沁阳市| 淮滨县| 宜昌市| 淮阳县| 西平县| 沂水县|