
从“线程昂贵”到“线程廉价”在异步编程中,我们使用异步线程池或许早已习惯这样的公式:(CPU核心数 + 1)×2≈最大线程数。操作系统线程是重量级资源:1MB的栈内存、昂贵的上下文切换、受限的内核调度能力。面对IO密集型场景(比如:数据库查询、RPC调用、文件读写、HTPP请求等),传统的解决方案无非是:异步编程(CompletableFuture、RxJava)少量线程 + 网络事件驱动(Netty、Spring WebFlux)Java 19引入了虚拟线程(Virtual Thread),Java 21正式GA,Spring Boot 3.2+开始提供一流支持。它的核心思想是:将“一个请求一个线程”从操作系统线程映射为“一个请求一个虚拟线程”,让百万级并发成为可能。业务背景:一个典型的企业级集成服务假如有一个需求通过ID查询用户信息、订单状态、获取附件、查询风控分数等信息,涉及到以下几种IO密集型的操作:查询数据库、查询Redis缓存、访问OSS对象存储、HTTP调用下游服务等;那么,通常实现的方式是通过CompletableFuture异步线程或线程池来实现并行操作,代码如下:@GetMapping("/aggregate/{id}") public AggregateResponse aggregate(@PathVariable String id) { // 并行调用5个下游,等待全部完成 CompletableFutureUserInfo userFuture = CompletableFuture.supplyAsync(() - userService.getUser(id)); CompletableFutureOrderStats orderFuture = CompletableFuture.supplyAsync(() - orderService.getStats(id)); CompletableFutureFileList fileFuture = CompletableFuture.supplyAsync(() - fileService.listFiles(id)); CompletableFutureRiskScore riskFuture = CompletableFuture.supplyAsync(() - riskService.getScore(id)); CompletableFutureCacheData cacheFuture = CompletableFuture.supplyAsync(()