大家好,又见面了,我是你们的朋友全栈君。
Guava之Stopwatch 计时器
Stopwatch
用来计算经过的时间(精确到纳秒)。
这个类比调用System.nanoTime()
优势在于:
- 性能
- 表现形式更丰富
一、类声明
以下是 com.google.common.base.Stopwatch
类的声明:
public final class Stopwatch extends Object
二、类方法
方法类型 | 方法描述 |
---|---|
static Stopwatch | createStarted() 创建启动一个新的stopwatch对象,用的是System.nanoTime()作为时间资源。 |
static Stopwatch | createStarted(Ticker ticker) 创建启动一个新的stopwatch对象,用的是特定的时间资源。 |
static Stopwatch | createUnstarted() 创建(但不启动)一个新的stopwatch对象,用的是System.nanoTime()作为时间资源。 |
static Stopwatch | createUnstarted(Ticker ticker) 创建(但不启动)一个新的stopwatch对象,用的是特定的时间资源。 |
Duration | elapsed() 返回将此秒表上显示的当前经过时间作为持续时间. |
long | elapsed(TimeUnit desiredUnit) 用特定的格式返回这个stopwatch经过的时间. |
boolean | isRunning() 如果start方法被调用。stop方法还没有调用。返回真. |
Stopwatch | reset() 把stopwatch经过的时间设置为零,状态设置为停止. |
Stopwatch | start() 启动 stopwatch. |
Stopwatch | stop() 停止stopwatch,读取的话将会返回经历过的时间. |
String | toString() 返回字符串形式的elapsed time. |
三、测试类
public class StopwatchDemo {
@Test
public void test1() throws Exception {
String orderNo = "12345678";
System.out.println("订单 [{" + orderNo + "}] 开始处理");
Stopwatch stopwatch = Stopwatch.createStarted();
TimeUnit.SECONDS.sleep(1); // 1秒处理时间
System.out.println("订单 [{" + orderNo + "}] 处理完成,耗时 [{" + stopwatch.stop() + "}]");
}
@Test
public void test2() throws Exception {
// 创建stopwatch并开始计时
Stopwatch stopwatch = Stopwatch.createStarted();
Thread.sleep(1980);
// 以秒打印从计时开始至现在的所用时间,向下取整
System.out.println(stopwatch.elapsed(TimeUnit.SECONDS)); // 1
// 停止计时
stopwatch.stop();
System.out.println(stopwatch.elapsed(TimeUnit.SECONDS)); // 1
// 再次计时
stopwatch.start();
Thread.sleep(100);
System.out.println(stopwatch.elapsed(TimeUnit.SECONDS)); // 2
// 重置并开始
stopwatch.reset().start();
Thread.sleep(1030);
// 检查是否运行
System.out.println(stopwatch.isRunning()); // true
long millis = stopwatch.elapsed(TimeUnit.MILLISECONDS); // 1034
System.out.println(millis);
// 打印
System.out.println(stopwatch.toString()); // 1.034 s
}
public static void main(String[] args) throws InterruptedException {
// 创建自动start的计时器
Stopwatch watch = Stopwatch.createStarted();
Thread.sleep(1000L);
long time = watch.elapsed(TimeUnit.MILLISECONDS);
System.out.println("代码执行时长:" + time);
watch.reset();
watch.start();
Thread.sleep(500L);
time = watch.elapsed(TimeUnit.MILLISECONDS);
System.out.println("代码执行时长:" + time);
}
}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/152453.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...
评论列表(1条)
你说StopWatch比System.nanoTime()功能丰富我能理解,但你说StopWatch比nanotime性能更优我确实不太理解,StopWatch底层不还是用的System.nanoTime()吗,为什么性能更优呢?