Java 21的虚拟线程(Virtual Threads)彻底改变了高并发编程的模式。与传统线程相比,虚拟线程的创建成本极低(每个线程仅占数百字节内存),可轻松支持百万级并发任务,而无需依赖复杂的线程池或响应式编程模型。
核心内容
1. 传统线程的瓶颈
平台线程与操作系统线程1:1绑定,大量线程导致内存耗尽和上下文切换开销。
1
2
3
| // 传统线程创建(限制性大)
Thread pthread = new Thread(() -> System.out.println("Platform thread"));
pthread.start();
|
2. 虚拟线程的解决方案
通过JVM调度实现M:N映射,用少量载体线程支撑大量虚拟线程。
1
2
3
4
| // 虚拟线程创建(轻量高效)
Thread vthread = Thread.ofVirtual()
.name("virtual-thread-")
.start(() -> System.out.println("Virtual thread"));
|
3. 实战场景对比
- HTTP请求处理:虚拟线程完美适配"一个请求一个线程"模型,吞吐量提升5倍以上
- 数据库操作:阻塞式I/O操作自动挂起并释放载体线程,避免资源浪费
最佳实践
- 替换
ExecutorService
为Executors.newVirtualThreadPerTaskExecutor()
- 避免在虚拟线程中使用
synchronized
锁(改用ReentrantLock
)
