Guava:StopWatch 计时器

简介

StopWatch 用来计算经过的时间(精确到纳秒)。

这个类比调用 System.now() 优势在于:

  • 性能

  • 表现形式更丰富

类方法说明

官方文档:Stopwatch (Guava: Google Core Libraries for Java 27.0.1-jre API)

方法名称 方法描述
createStarted() 创建启动一个新的stopwatch对象,用的是System.nanoTime()作为时间资源。
createStarted(Ticker ticker) 创建启动一个新的stopwatch对象,用的是特定的时间资源。
createUnstarted() 创建(但不启动)一个新的stopwatch对象,用的是System.nanoTime()作为时间资源。
createUnstarted(Ticker ticker) 创建(但不启动)一个新的stopwatch对象,用的是特定的时间资源。
elapsed() 返回将此秒表上显示的当前经过时间作为持续时间.
elapsed(TimeUnit desiredUnit) 用特定的格式返回这个stopwatch经过的时间.
isRunning() 如果start方法被调用。stop方法还没有调用。返回真.
reset() 把stopwatch经过的时间设置为零,状态设置为停止.
start() 启动 stopwatch.
Stopwatch stop() 停止stopwatch,读取的话将会返回经历过的时间.
toString() 返回字符串形式的elapsed time.

使用Demo

java 复制代码
import com.google.common.base.Stopwatch;
import org.junit.Test;

import java.util.concurrent.TimeUnit;

/**
 * Stopwatch 测试
 */
public class StopwatchTest {

    @Test
    public void test1() throws Exception {

        Stopwatch stopwatch = Stopwatch.createStarted();

        TimeUnit.SECONDS.sleep(1);  // 1秒处理时间

        System.out.println("耗时:"+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
    }
}
相关推荐
聊天QQ:276998854 天前
多智能体分布式模型预测控制在编队中的奇幻之旅
guava
武子康4 天前
Java-193 Spymemcached 深入解析:线程模型、Sharding 与序列化实践全拆解
java·开发语言·redis·缓存·系统架构·memcached·guava
武子康6 天前
Java-192 深入拆解 EVCache 内部原理:Memcached 架构、Slab 分配与 LRU 过期机制全解析
数据库·redis·缓存·架构·memcached·guava·evcache
武子康6 天前
Java-190 EVCache入门:Netflix 级分布式缓存架构、性能指标与多区域部署全解析
java·redis·分布式·缓存·架构·guava·guava cache
武子康7 天前
Java-189 Guava Cache 源码剖析:LocalCache、Segment 与 LoadingCache 工作原理全解析
java·redis·后端·spring·缓存·guava·guava cache
Dolphin_Home7 天前
【实用工具类】基于 Guava Cache 实现通用 Token 缓存工具类(附完整源码)
spring·缓存·guava
武子康8 天前
Java-187 Guava Cache 并发参数与 refreshAfterWrite 实战:LoadingCache 动态加载与自定义 LRU 全解析
java·开发语言·spring boot·redis·spring·缓存·guava
武子康8 天前
Java-188 Guava Cache 疑难问题实战:OOM、过期清理、命中率异常和阻塞排查
java·spring boot·redis·后端·spring·缓存·guava
武子康9 天前
Java-185 Guava Cache 实战:删除策略、过期机制与常见坑全梳理
java·spring boot·redis·spring·缓存·guava·guava cache