StopWatch类

简介:
  1 ExpandedBlockStart.gif /**
  2 * 在C#中提供了一个专门用于简单测试运行时间的类StopWatch,
  3 * 但是貌似JDK中并没有提供这样的类,既然没有提供,那么自己动手丰衣足食了。
  4 * 参考网上代码,简单写了一个。
  5 * 
  6 * 后来查了以下,貌似commons-lang中已经提供了一个StopWatch的类了,
  7 * 而且那个类的功能写的更完善一些,这个类就当是一个学习的渐进过程了。
  8 * 
  9 * @author levin
 10 * @since 2011-07-07
 11 */

 12 ExpandedBlockStart.gif public   class  StopWatch  {
 13    private long startTime;
 14    private long endTime;
 15    private boolean isRunning;
 16    
 17ExpandedSubBlockStart.gif    /**
 18     * 构造{@link #StopWatch}实例,清除所有状态
 19     */

 20ExpandedSubBlockStart.gif    public StopWatch() {
 21        reset();
 22    }

 23    
 24ExpandedSubBlockStart.gif    /**
 25     * 调用{@link #start()}以开始计时,调用该方法时,确保{@link #StopWatch}是没有处于运行状态,
 26     * 即{@link #start()}方法还未调用,或已经调用了{@link #stop()}方法。否则会抛{@link #IllegalStateException}
 27     * 
 28     * @return {@link #StopWatch}
 29     * @since 2011-07-07
 30     */

 31ExpandedSubBlockStart.gif    public StopWatch start() {
 32ExpandedSubBlockStart.gif        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    
 43ExpandedSubBlockStart.gif    /**
 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     */

 51ExpandedSubBlockStart.gif    public StopWatch stop() {
 52ExpandedSubBlockStart.gif        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    
 62ExpandedSubBlockStart.gif    /**
 63     * 获取{@link #StopWatch}的运行时间,以毫秒为单位。如果还未调用{@link #stop()}方法,则返回当前时间
 64     * 和开始时间毫秒差;否则返回{@link #StopWatch}的Watch时间。
 65     * 
 66     * @return 获取{@link #StopWatch}的运行时间,以毫秒为单位
 67     * @since 2011-07-07
 68     */

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

 75    }

 76    
 77ExpandedSubBlockStart.gif    /**
 78     * 获取{@link #StopWatch}的运行时间,以秒为单位。其他和{@link #getElapsed()}方法类似。
 79     * 
 80     * @return 获取{@link #StopWatch}的运行时间,以秒为单位
 81     * @since 2011-07-07
 82     */

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

 86    
 87ExpandedSubBlockStart.gif    /**
 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     */

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

 99        
100        return endTime - startTime;
101    }

102    
103ExpandedSubBlockStart.gif    /**
104     * 获取{@link #StopWatch}的运行时间,以秒为单位。其他参考{@link #getRunningTime()}方法。
105     * 
106     * @return 获取{@link #StopWatch}的运行时间,以秒为单位
107     * @since 2011-07-07
108     */

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

112    
113    
114ExpandedSubBlockStart.gif    /**
115     * 清除当前所有状态
116     * 返回{@link #StopWatch}而不是void,是为了能实用方法链的模式
117     * 
118     * @return {@link #StopWatch}
119     * @since 2011-07-07
120     */

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

128}

相关文章
|
1月前
|
Java 程序员 调度
Thread类及常见方法
Thread类及常见方法
|
8月前
|
Java
System与Runtime类
System与Runtime类
32 0
|
7月前
|
算法 Java
System类
System类
23 0
|
7月前
|
Java 调度
Thread类的方法
Thread类的方法
25 0
|
11月前
|
Java
StopWatch
StopWatch用法
62 0
|
12月前
|
安全 Java API
【JavaEE】Thread 类及常用方法
哈喽,大家好~我是保护小周ღ,本期为大家带来的是 Java 多线程的 Thread 类,讲述了 Thread 类的常用方法及常用属性,例如:线程的 name, 如何启动线程,终止线程,等待线程…… 更多精彩敬请期待:保护小周ღ *★,°*:.☆( ̄▽ ̄)/$:*.°★* ‘
|
Java
Java | 使用 StopWatch 优雅打印执行耗时
Java | 使用 StopWatch 优雅打印执行耗时
1069 0
|
监控 Java Apache
【小家java】Apache Commons-lang3提供的StopWatch执行时间监视器,以及Spring提供的StopWatch分析(下)
【小家java】Apache Commons-lang3提供的StopWatch执行时间监视器,以及Spring提供的StopWatch分析(下)
|
Java Apache Spring
【小家java】Apache Commons-lang3提供的StopWatch执行时间监视器,以及Spring提供的StopWatch分析(上)
【小家java】Apache Commons-lang3提供的StopWatch执行时间监视器,以及Spring提供的StopWatch分析(上)
System类的常用方法(currentTimeMillis与arraycopy)
System类的常用方法 currentTimeMillis与arraycopy import java.util.Arrays; /* java.lang.System类中提供了大量的静态方法,可以获取与系统相关的信息或系统级操作,在System类的API文档中,常用的方法有: public st