Concurrency 高级

用 StableValue 替代双重检查锁定,实现延迟单例。

✕ Java 8
class Config {
    private static volatile Config inst;
    static Config get() {
        if (inst == null) {
            synchronized (Config.class) {
                if (inst == null)
                    inst = load();
            }
        }
        return inst;
    }
}
✓ Java 25 (Preview)
class Config {
    private static final
        StableValue<Config> INST =
            StableValue.of(Config::load);

    static Config get() {
        return INST.get();
    }
}
发现此代码有问题? 告诉我们。
🧹

无样板代码

无 volatile、synchronized 或双重 null 检查。

🔒

正确的内存语义

JVM 保证正确的可见性,无需手动内存屏障。

📖

意图清晰

StableValue 的名称准确描述了其语义。

旧方式
synchronized + volatile
现代方式
StableValue
自 JDK
25
难度
高级
无锁延迟初始化
预览

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

StableValue 以正确的内存语义封装延迟初始化模式。它消除了对 volatile、synchronized 和双重 null 检查的需要。

分享 𝕏 🦋 in