JDK 21 正式引入的**虚拟线程(Virtual Thread)**由 JVM 调度而非操作系统内核调度,单个 JVM 可轻松创建数百万个虚拟线程。当虚拟线程阻塞在 I/O 时,JVM 自动卸载(unmount)其载体线程,极大提升阻塞式代码的并发能力。
一、虚拟线程执行器与结构化并发
java
import java.util.concurrent.Executors;
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
// 每个任务一个虚拟线程,阻塞 I/O 不再浪费平台线程
for (int i = 0; i < 100_000; i++) {
int id = i;
executor.submit(() -> {
String result = blockingHttpCall("https://api.example.com/item/" + id);
System.out.println(result);
});
}
}
// try-with-resources 结束自动等待所有任务完成