StopWatch类

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

 12 public   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}

相关文章
|
10月前
|
安全 Java 开发者
AtomicInteger 类常用方法介绍
AtomicInteger 类常用方法介绍
66 1
|
Java
StopWatch
StopWatch用法
96 0
C#使用 BackgroundWorker 类实现多线程
C#使用 BackgroundWorker 类实现多线程
C#使用 BackgroundWorker 类实现多线程
|
Java Apache Spring
Apache和Spring提供的StopWatch执行时间监视器
Apache和Spring提供的StopWatch执行时间监视器前言编码过程中我们经常会希望得到一段代码(一个方法)的执行时间,本文将介绍两种时间监视器(秒表)来让你优雅的、灵活的处理这个问题。 Java源生方式这种方式最最简单,最好理解,当然也是最为常用:我们自己书写。
1258 0
|
Java
Java | 使用 StopWatch 优雅打印执行耗时
Java | 使用 StopWatch 优雅打印执行耗时
1583 0
|
调度
Thread类的有关常用方法
Thread类的有关常用方法
89 0
|
Java Spring
Spring StopWatch详解
《读尽源码》
278 0
|
Java Apache Spring
【小家java】Apache Commons-lang3提供的StopWatch执行时间监视器,以及Spring提供的StopWatch分析(上)
【小家java】Apache Commons-lang3提供的StopWatch执行时间监视器,以及Spring提供的StopWatch分析(上)
|
监控 Java Apache
【小家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