代码对比
✕ 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 支持
无锁延迟初始化
预览
JDK 25 预览版(JEP 502,StableValue)。需要 --enable-preview。
工作原理
StableValue 以正确的内存语义封装延迟初始化模式。它消除了对 volatile、synchronized 和双重 null 检查的需要。
相关文档