jdk21特性-Virtual Threads(虚拟线程)

Java 21(2023 年 9 月发布,LTS 长期支持版本) 是继 Java 17 之后最新的 LTS 版本。


最重要的特性:Virtual Threads(虚拟线程)—— JEP 444(正式版)

这是 Java 21 中最重磅的特性。

传统平台线程(Platform Thread)的问题

  • 一个线程对应一个操作系统线程,创建/切换成本高
  • 线程池容易耗尽(尤其是 I/O 密集型应用,如 Web 服务)。
  • 难以支撑成千上万的并发请求。

虚拟线程特点

  • 轻量级:由 JVM 管理,不是 OS 线程。内存占用极小(几 KB),可创建百万级虚拟线程。
  • 无阻塞:当虚拟线程执行阻塞操作(如 I/O、sleep、锁等待)时,JVM 会自动“卸载”(unmount),让底层载体线程(Carrier Thread)去执行其他虚拟线程。
  • 编程模型不变:代码写法几乎和传统线程一样(Thread.startVirtualThread()Executors.newVirtualThreadPerTaskExecutor())。

示例

1
2
3
4
5
6
7
8
// Java 21 推荐写法
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
executor.submit(() -> {
// 你的业务代码,可以随意阻塞
Thread.sleep(1000);
System.out.println("Hello from virtual thread!");
});
}

适用场景:Web 应用(Spring Boot)、微服务、文件/网络 I/O 密集型任务。
不适合:极致 CPU 计算密集型任务(仍推荐平台线程 + 线程池)。

对 Spring Boot 的影响:在 Spring Boot 3.2+ 中,只需配置 spring.threads.virtual.enabled=true,整个应用即可切换到虚拟线程,几乎零代码修改。

Java 21 在 Spring Boot 项目中的推荐用法

在你的 Spring Boot 项目中(推荐搭配 **Spring Boot 3.3+ 或 3.5+**):

  1. 使用 JDK 21(或至少 17)
  2. 启用虚拟线程(application.properties):
1
spring.threads.virtual.enabled=true