启用虚拟线程后，http 请求、async 注解处理、部分 job 执行将使用虚拟线程池。

### 1、通过配置启用（推荐）


```yaml
solon.threads.virtual.enabled: true #启用虚拟线程池（默认false）
```

配置好后，如何获取状态（java21+ 环境才有效）？

```java
Solon.cfg().isEnabledVirtualThreads();
```



更多配置参考：[应用常用配置说明](/article/174)


### 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 发布） 适配：

添加依赖包：

```xml
<dependency>
    <groupId>org.noear</groupId>
    <artifactId>solon-java25</artifactId>
</dependency>
```

切换适配工厂 ScopeLocalJdk25（默认采用 ScopeLocalJdk8），切换后还可以支持跨线程JDBC事务。

```java
public class App {
    public static void main(String[] args) {
        Solon.start(App.class, args, app->{
            //替换 ScopeLocal 接口的实现（基于 java25 的 ScopedValue 封装）
            app.factories().scopeLocalFactory(ScopeLocalJdk25::new);
        });
    }
}
```
