JDK26中LazyConstant的具体使用
作者:暮色微凉
时间:2026-07-01
浏览:0
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 函数,就定义好了一个惰性常量。这个值会在首次访问后被缓存下来,后续直接读取,不会再重复执行初始化逻辑。可以说,这才是真正意义上的“延迟加载”——省心、安全、高效。
作者最新文章
Photoshop文字外框怎么设置?给文字加边框的实用方法
2026-09-22 16:12
白描 PDF
2026-09-16 17:44
密码键盘
2026-09-16 17:43
3dmax快捷键失效了怎么办
2026-09-16 13:53
Xiaomi 18 Fold首销数据解读:较上代大折叠增长310%的原因与配置分析
2026-09-08 16:55
上一篇:
如何检查Debian的Java编译环境
热门文章
更多
精品专题
更多
Mac软件
更多
WINDOWS
更多


































