欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

java StopWatch的简单实现,javastopwatch实现,最新代码:StopWat

来源: javaer 分享于  点击 15096 次 点评:100

java StopWatch的简单实现,javastopwatch实现,最新代码:StopWat


最新代码:StopWatch.java

StopWatch.java

package canghailan.util;import java.util.concurrent.TimeUnit;/** * <pre> * startTime             splitTime                  stopTime/now * |<-   getSplitTime()   ->|<-   getTimeFromSplit()   ->| * |<-                   getTime()                     ->| * </pre> * * @author canghailan 2011-12-10 07:09 */public class StopWatch {    private long startTime;    private long splitTime;    private long stopTime;    private State currentState;    public StopWatch() {        currentState = State.PREPARED;    }    public void start() {        currentState.start(this);    }    public void split() {        currentState.split(this);    }    public void suspend() {        currentState.suspend(this);    }    public void resume() {        currentState.resume(this);    }    public void stop() {        currentState.stop(this);    }    public void reset() {        currentState.reset(this);    }    public long getTime() {        return TimeUnit.NANOSECONDS.toMillis(getNanoTime());    }    public long getNanoTime() {        return currentState.getNanoTime(this);    }    public long getSplitTime() {        return TimeUnit.NANOSECONDS.toMillis(getSplitNanoTime());    }    public long getSplitNanoTime() {        return currentState.getSplitNanoTime(this);    }    public long getTimeFromSplit() {        return TimeUnit.NANOSECONDS.toMillis(getNanoTimeFromSplit());    }    public long getNanoTimeFromSplit() {        return currentState.getNanoTimeFromSplit(this);    }    public boolean hasSplit() {        return splitTime > 0;    }    private void checkSplitExist() {        if (!hasSplit()) {            throw new RuntimeException("No split exists!");        }    }    private static enum State {        PREPARED {            @Override            public void split(StopWatch stopWatch) {                error(PREPARED, "split");            }            @Override            public void suspend(StopWatch stopWatch) {                error(PREPARED, "suspend");            }            @Override            public void resume(StopWatch stopWatch) {                error(PREPARED, "resume");            }            @Override            public void stop(StopWatch stopWatch) {                error(PREPARED, "stop");            }            @Override            public void reset(StopWatch stopWatch) {                // do nothing            }            @Override            public long getNanoTime(StopWatch stopWatch) {                error(PREPARED, "get time");                return 0;            }            @Override            public long getSplitNanoTime(StopWatch stopWatch) {                error(PREPARED, "get split time");                return 0;            }            @Override            public long getNanoTimeFromSplit(StopWatch stopWatch) {                error(PREPARED, "get time from split");                return 0;            }        },        RUNNING {            @Override            public void start(StopWatch stopWatch) {                error(RUNNING, "start");            }            @Override            public void resume(StopWatch stopWatch) {                error(RUNNING, "resume");            }            @Override            public long getNanoTime(StopWatch stopWatch) {                return System.nanoTime() - stopWatch.startTime;            }            @Override            public long getNanoTimeFromSplit(StopWatch stopWatch) {                stopWatch.checkSplitExist();                return System.nanoTime() - stopWatch.splitTime;            }        },        SUSPEND {            @Override            public void start(StopWatch stopWatch) {                error(SUSPEND, "start");            }            @Override            public void split(StopWatch stopWatch) {                error(SUSPEND, "split");            }            @Override            public void suspend(StopWatch stopWatch) {                error(SUSPEND, "suspend");            }            @Override            public void stop(StopWatch stopWatch) {                stopWatch.currentState = STOPPED;            }        },        STOPPED {            @Override            public void start(StopWatch stopWatch) {                error(STOPPED, "start");            }            @Override            public void split(StopWatch stopWatch) {                error(STOPPED, "split");            }            @Override            public void suspend(StopWatch stopWatch) {                error(STOPPED, "suspend");            }            @Override            public void resume(StopWatch stopWatch) {                error(STOPPED, "resume");            }            @Override            public void stop(StopWatch stopWatch) {                error(STOPPED, "stop");            }        };        public void start(StopWatch stopWatch) {            stopWatch.startTime = System.nanoTime();            stopWatch.currentState = RUNNING;        }        public void split(StopWatch stopWatch) {            stopWatch.splitTime = System.nanoTime();        }        public void suspend(StopWatch stopWatch) {            stopWatch.stopTime = System.nanoTime();            stopWatch.currentState = SUSPEND;        }        public void resume(StopWatch stopWatch) {            long suspendedTime = System.nanoTime() - stopWatch.stopTime;            if (stopWatch.hasSplit()) {                stopWatch.splitTime += suspendedTime;            }            stopWatch.startTime += suspendedTime;            stopWatch.currentState = RUNNING;        }        public void stop(StopWatch stopWatch) {            stopWatch.stopTime = System.nanoTime();            stopWatch.currentState = STOPPED;        }        public void reset(StopWatch stopWatch) {            stopWatch.startTime = 0;            stopWatch.splitTime = 0;            stopWatch.stopTime = 0;            stopWatch.currentState = PREPARED;        }        public long getNanoTime(StopWatch stopWatch) {            return stopWatch.stopTime - stopWatch.startTime;        }        public long getSplitNanoTime(StopWatch stopWatch) {            stopWatch.checkSplitExist();            return stopWatch.splitTime - stopWatch.startTime;        }        public long getNanoTimeFromSplit(StopWatch stopWatch) {            stopWatch.checkSplitExist();            return stopWatch.stopTime - stopWatch.splitTime;        }        protected static void error(State current, String action) {            throw new RuntimeException("Could not " + action +                    " when stopwatch is " + current + ".");        }    }}
相关栏目:

用户点评