JDK26中LazyConstant的具体使用
JDK26引入LazyConstant替代已移除的StableValue,通过LazyConstant.of()工厂方法传入Supplier定义惰性常量,首次调用get()时执行初始化并缓存结果,后续直接读取。内置线程安全,支持JVM常量折叠等深度优化,简化传统双重检查锁定等样板代码。
前言
延迟初始化这事,说起来简单,做起来却总让人头疼。过去开发者为了做到“按需加载”,要么用双重检查锁定,要么依赖各种外部框架——代码写起来又啰嗦又容易埋坑。到了 JDK26,情况终于变了:LazyConstant 作为新引入的延迟常量,接替了 JDK25 中已被移除的 StableValue,本质上就是一个专门持有不可变数据的容器,核心目标就是实现对象的按需初始化。说白了,它想替你省掉那些传统但又复杂的延迟初始化样板代码。
LazyConstant 使用
说到传统的双重检查锁定,代码量不小,而且稍不留神就会写出线程不安全的版本。而 LazyConstant 的解决思路非常直接:
- 按需初始化:只在第一次调用
get()时真正执行初始化逻辑,应用启动时完全不触发,启动速度自然快不少。 - 内置线程安全:JVM 把初始化过程的线程安全性封装在了底层,开发者不用再写任何同步代码,也不用管什么双重检查锁定了。
- JVM 深度优化:一旦值完成初始化,JVM 就会把它当成真正的
final常量来处理,直接开启常量折叠(constant folding)等高级优化。后续的get()调用,JIT 编译器甚至可能直接把结果内联进来——这性能,比传统的volatile懒加载方案高出一截。 - 简化代码:把那些冗长的样板代码一扫而空,代码读起来更清爽,维护起来也省心。
那么,具体怎么用?很简单,直接看例子。
LazyConstant 使用
public class UserService {
public String say() {
return "success";
}
}
public class LazyConstantDemo {
static void main(String[] args) {
LazyConstant lazyConstant = LazyConstant.of(() -> {
System.out.println();
return new UserService();
});
UserService a = lazyConstant.get();
System.out.println(a);
}
}
运行后输出结果如下:

总结
LazyConstant 目前还是 JDK26 的一个预览特性,但它在线程安全方面做得相当到位。用法极其简洁:通过 LazyConstant.of() 工厂方法传入一个 Supplier 函数,就定义好了一个惰性常量。这个值会在首次访问后被缓存下来,后续直接读取,不会再重复执行初始化逻辑。可以说,这才是真正意义上的“延迟加载”——省心、安全、高效。
Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















