确实是,这样也能统计这段代码的执行时间,那么为什么还会有Stopwatch(我也有这种想法)
官方称不直接使用System#nanoTime是有以下几个原因:
-
时间源可以替代 可以重写Ticker(下面会介绍)
-
nanoTime的返回值是纳秒,返回的值没有意义,Stopwatch抽象返回值
下面从实现方式来分析下guava为什么会设计这么类
[](()源码分析
内部有几个成员变量
//时间源 一般和Stopwatch一起使用,而不是单独使用
private final Ticker ticker;
private boolean isRunning;
private long elapsedNanos;
private long startTick;
先看下Ticker(是个abstract类) 都有什么:
public static Ticker systemTicker() {
return SYSTEM_TICKER;
}
private static final Ticker SYSTEM_TICKER =
new Ticker() {
@Override
public long read() {
// 实际上就是System.nanoTime();
return Platform.systemNanoTime();
}
};
// 子类重写
public abstract long read();
回到Stopwatch,看下它的构造方式:
public static Stopwatch createUnstarted() {
return new Stopwatch();
}
/**
-
Creates (but does not start) a new stopwatch, using the specified time source.
-
@since 15.0
*/
public static Stopwatch createUnstarted(Ticker ticker) {
return new Stopwatch(ticker);
}
/**
-
Creates (and starts) a Java开源项目【ali1024.coding.net/public/P7/Java/git】 new stopwatch using {@link System#nanoTime} as its time source.
-
@since 15.0
*/
public static Stopwatch createStarted() {
return new Stopwatch().start();
}
Stopwatch() {
this.ticker = Ticker.systemTicker();
}
Stopwatch(Ticker ticker) {
this.ticker = checkNotNull(ticker, “ticker”);
}
包括创建不启动,创建启动的构造方式
执行流程
start–> stop 或者 reset
看下代码,很简单
public Stopwatch 《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》开源 start() {
// 先判断是否处于执行状态
checkState(!isRunning, “This stopwatch is already running.”);
最后
本人也收藏了一份Java面试核心知识点来应付面试,借着这次机会可以送给我的读者朋友们
目录:
Java面试核心知识点
一共有30个专题,足够读者朋友们应付面试啦,也节省朋友们去到处搜刮资料自己整理的时间!
Java面试核心知识点
已经有读者朋友靠着这一份Java面试知识点指导拿到不错的offer了
a面试核心知识点
一共有30个专题,足够读者朋友们应付面试啦,也节省朋友们去到处搜刮资料自己整理的时间!
[外链图片转存中…(img-tVOVyq5F-1650444646213)]
Java面试核心知识点
已经有读者朋友靠着这一份Java面试知识点指导拿到不错的offer了
[外链图片转存中…(img-rigJGv1I-1650444646214)]