Stopwatch 一般用于程序的计时运算,用于性能调试。
自己实现,也就是调用SimpleDateFormat 时间函数,start()时候调用,需要时间戳就再次调用
先写个demo:Stopwatch stopwatch = Stopwatch.createStarted();
Thread thread = new Thread(() -> {
try {
sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
stopwatch.stop();
LOGGER.info("线程是否运行{} {}",stopwatch.isRunning(),stopwatch.toString());
stopwatch.start();
LOGGER.info("线程是否运行{} {}",stopwatch.isRunning(),stopwatch.toString()); }
});
thread.start();
try {
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
LOGGER.info("线程是否运行{} {}",stopwatch.isRunning(),String.valueOf(stopwatch.elapsed(TimeUnit.MILLISECONDS)));
stopwatch.stop();
LOGGER.info("线程是否运行{} {}",stopwatch.isRunning(),stopwatch.toString());
stopwatch.start();
LOGGER.info("线程是否运行{} {}",stopwatch.isRunning(),stopwatch.toString());
Stopwatch类有四个成员变量
private final Ticker ticker; //计时器 private boolean isRunning; //是否运行的标志位 private long elapsedNanos; //表示从调用start()到现在所经过的时间 private long startTick; //开始的时间 几个看起来比较陌生的方法:
private long elapsedNanos() { return this.isRunning ? this.ticker.read() - this.startTick + this.elapsedNanos : this.elapsedNanos; }
Stopwatch本身的私有方法,没有暴露出去,而是暴露了下面的带有时间单位参数的方法.
public long elapsed(TimeUnit desiredUnit) { return desiredUnit.convert(this.elapsedNanos(), TimeUnit.NANOSECONDS); }
返回从开始到现在的时间,如果秒表 isRunning == false ,就返回秒表结束的时间。
其他几个方法:public static Stopwatch createUnstarted()
需要注意的是,调用这个方法的时候,stopwatch就已经开始运行了
public Stopwatch start()
public Stopwatch stop()
public Stopwatch reset()
public boolean isRunning() { return this.isRunning; }