Guava
Guava 是 Google 维护的 Java 基础库集合,覆盖不可变数据结构、并发缓存、事件分派和限流算法。
本册问题地图
Section titled “本册问题地图”Guava 不是一组孤立工具,而是一套“用更强语义减少调用方错误”的基础设施:
- 不可变集合为什么值得单独设计? 它把构造完成后的状态冻结,使共享、缓存和并发读取不再需要防御性同步;代价是更新必须创建新对象。
- Guava Cache 与 Caffeine 的差别看什么? 不要只比较 API,要比较维护模型、驱逐策略、并发读写路径和现代版本的性能取舍。
- EventBus 隐藏了什么? 发布者只关心事件类型,订阅者由反射或注册表匹配;解耦带来的代价是调用链不显式、异常和线程模型容易被忽略。
- RateLimiter 限制的是什么? 它平滑的是许可发放时间,不等于并发数限制;等待许可的线程仍可能长期占用线程资源。
- 工具类的共同边界是什么? 便利 API 只能减少样板,不能替调用方决定生命周期、异常传播和业务幂等。
| 项 | 值 |
|---|---|
| 仓库 | google/guava |
| 本地路径 | E:\source\java\base\guava |
| 分支 | master |
| Commit | 94f39958b(2026-08-11) |
| Maven 版本 | 999.0.0-HEAD-jre-SNAPSHOT |
| 稳定版本线 | README 示例中的 33.6.0-jre |
本册源码坐标均基于上述 commit。当前快照是开发分支,稳定版本号不是该 commit 的精确 tag。
它解决什么问题
Section titled “它解决什么问题”- 不可变集合降低共享状态的同步成本,并针对小集合提供紧凑布局。
- 本地缓存合并并发加载,统一过期、引用和淘汰策略。
- EventBus 隐藏生产者与订阅者的直接引用,提供进程内分派。
- RateLimiter 用时间模型表达平均速率、突发容量和预热行为。
ImmutableList/ImmutableSet/ImmutableMap的of、copyOf、Builder。CacheBuilder#build→LocalCache→Segment。EventBus#register/post→SubscriberRegistry→Dispatcher。RateLimiter#acquire→reserve→SmoothRateLimiter#reserveEarliestAvailable。
| 对象 | 对照点 |
|---|---|
JDK List / Map |
Guava 用不可变约束换取共享安全性和专用布局 |
| Caffeine | Guava LocalCache 使用分段锁;Caffeine 将读路径和维护队列进一步拆开 |
| Reactor / RxJava | EventBus 是反射驱动的进程内分派,不提供背压和流组合语义 |