Java 虚拟线程:轻量级并发新纪元
探索 Project Loom 带来的虚拟线程,以极低开销创建成千上万个并发任务,简化高并发编程。 · 难度:入门 · +15XP
虚拟线程是什么?
虚拟线程(Java 21 正式版)是 JDK 实现的轻量级线程,由 JVM 调度而非操作系统。它们占用极少内存,适合大量 I/O 密集型任务。
创建方式
// 方式一:Thread.ofVirtual()
Thread vThread = Thread.ofVirtual()
.name("my-virtual")
.start(() -> System.out.println("虚拟线程运行"));
// 方式二:Executors.newVirtualThreadPerTaskExecutor()
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
Future<?> future = executor.submit(() -> heavyIO());
future.get();
}
与平台线程对比
| 特性 | 平台线程 | 虚拟线程 |
|---|---|---|
| 创建成本 | 高(1MB+ 栈) | 极低(几百字节) |
| 最大数量 | 受限于内存/OS | 数百万 |
| 阻塞影响 | 阻塞 OS 线程 | 释放载体线程 |
| 适用场景 | CPU 密集型 | I/O 密集型 |
注意事项
- 不要使用线程池池化虚拟线程,每次创建新虚拟线程即可。
- 避免 synchronized 块(会固定载体线程),优先使用 ReentrantLock。
- 虚拟线程适合大量短生命周期的任务。
练习提示
在 starter_code 中,使用虚拟线程执行器同时发起 10 个模拟 I/O 任务(Thread.sleep),观察执行时间。