问题:怎样启用 Java21 虚拟线程?
2025年12月24日 上午10:38:32
启用虚拟线程后,http 请求、async 注解处理、部分 job 执行将使用虚拟线程池。
1、通过配置启用(推荐)
solon.threads.virtual.enabled: true #启用虚拟线程池(默认false)
配置好后,如何获取状态(java21+ 环境才有效)?
Solon.cfg().isEnabledVirtualThreads();
更多配置参考:应用常用配置说明
2、更好的使用虚拟线程,还需要 solon-java25
使用虚拟线程三件套:
| 配套说明 | 备注 |
|---|---|
| 启用虚拟线程(java 21 发布)。 通过配置启用 | Solon v2.7 已支持 |
| 不使用锁 synchronized 。 改用 ReentrantLock 或其它锁 | Solon v2.7 已改进 |
| 不使用 ThreadLocal 。 改用 ScopedValue(java 25 发布) | Solon v3.8 已适配 |
更好的使用虚拟线程需要 solon-java25 扩展的提供 ScopedValue(java21 预览,java25 发布) 适配:
添加依赖包:
<dependency>
<groupId>org.noear</groupId>
<artifactId>solon-java25</artifactId>
</dependency>
切换适配工厂 ScopeLocalJdk25(默认采用 ScopeLocalJdk8),切换后还可以支持跨线程JDBC事务。
public class App {
public static void main(String[] args) {
Solon.start(App.class, args, app->{
//替换 ScopeLocal 接口的实现(基于 java25 的 ScopedValue 封装)
app.factories().scopeLocalFactory(ScopeLocalJdk25::new);
});
}
}