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 | // Java 21 推荐写法 |
适用场景: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+**):
- 使用 JDK 21(或至少 17)
- 启用虚拟线程(
application.properties):
1 | spring.threads.virtual.enabled=true |