Spring Boot 4.x最大的亮点之一是对Java 21虚拟线程的深度集成。虚拟线程是JDK 21引入的轻量级线程实现,彻底改变了Java并发编程的范式。
虚拟线程是JVM管理的轻量级线程:
@RestController public class TraditionalController { private ExecutorService executor = Executors.newFixedThreadPool(200); @GetMapping("/user/{id}") public CompletableFuture<User> getUser(@PathVariable Long id) { return CompletableFuture.supplyAsync(() -> { return userRepository.findById(id); }, executor); } }
@RestController public class VirtualThreadController { @GetMapping("/user/{id}") public User getUser(@PathVariable Long id) { // 直接阻塞调用,无需CompletableFuture return userRepository.findById(id); } } // 启用虚拟线程 @SpringBootApplication public class Application { public static void main(String[] args) { System.setProperty("jdk.virtualThreadScheduler.parallelism", "256"); SpringApplication.run(Application.class, args); } @Bean public TomcatProtocolHandlerCustomizer<?> protocolHandlerVirtualThreads() { return protocolHandler -> { protocolHandler.setExecutor(Executors.newVirtualThreadPerTaskExecutor()); }; } }
测试场景:10万并发请求
| 指标 | 平台线程池 | 虚拟线程 |
|---|---|---|
| 内存占用 | 8GB | 512MB |
| 吞吐量(QPS) | 5,000 | 45,000 |
| 响应时间(P99) | 850ms | 95ms |
| CPU利用率 | 65% | 88% |
结论: 虚拟线程在IO密集型场景下性能提升近10倍
某电商系统将订单服务升级至虚拟线程:
改造前:
改造后:
<maven.compiler.source>21</maven.compiler.source> <maven.compiler.target>21</maven.compiler.target>
@Configuration public class ThreadConfig { @Bean public AsyncTaskExecutor asyncTaskExecutor() { return new TaskExecutorAdapter( Executors.newVirtualThreadPerTaskExecutor() ); } }
CompletableFuture包装@Async注解