Concurrency 高级

无需 volatile 或 synchronized 的线程安全延迟初始化。

✕ Java 8
private volatile Logger logger;
Logger getLogger() {
    if (logger == null) {
        synchronized (this) {
            if (logger == null)
                logger = createLogger();
        }
    }
    return logger;
}
✓ Java 25 (Preview)
private final StableValue<Logger> logger =
    StableValue.of(this::createLogger);

Logger getLogger() {
    return logger.get();
}
发现此代码有问题? 告诉我们。
🧹

零样板代码

无 volatile、synchronized 或 null 检查。

JVM 优化

JVM 可以将稳定值常量折叠,就像 final 字段一样。

🔒

线程安全

保证只初始化一次,不存在竞态条件。

旧方式
双重检查锁定
现代方式
StableValue
自 JDK
25
难度
高级
稳定值
预览

JDK 25 预览版(JEP 502)。需要 --enable-preview。

StableValue 提供内置线程安全的延迟初始化不可变值。JVM 知道该值只写入一次,可以进行更激进的优化,包括常量折叠。

分享 𝕏 🦋 in