Java知识分享网 - 轻松学习从此开始!    

Java知识分享网

        
AI编程,程序员挑战年入30~100万高级指南 - 职业规划
SpringBoot+SpringSecurity+Vue权限系统高级实战课程        

IDEA永久激活

Java微信小程序电商实战课程(SpringBoot+VUe)

     

AI人工智能学习大礼包

     

PyCharm永久激活

66套java实战课程无套路领取

     

Cursor+Claude AI编程 1天快速上手视频教程

     
当前位置: 主页 > Java文档 > Java基础相关 >

深入浅出 Java 虚拟线程:从原理到生产环境避坑指南


时间:2026-04-17 10:57来源:http://www.java1234.com 作者:转载  侵权举报
深入浅出 Java 虚拟线程:从原理到生产环境避坑指南
失效链接处理
深入浅出 Java 虚拟线程:从原理到生产环境避坑指南


 
 
相关截图:
 

主要内容:


1. 为什么需要虚拟线程
 
在传统 Java 并发里,“一个请求一个线程”非常直观,但平台线程(OS 线程)成本高:
 
创建/销毁成本高:线程栈、调度开销不可忽略  
 
上下文切换昂贵:线程多了吞吐反而下降  
 
内存占用大:默认栈空间使得大规模并发变得困难  
 
阻塞 I/O 放大浪费:线程大量时间在等网络/磁盘,CPU 空转
 
虚拟线程的目标很明确:让同步阻塞式编程模型也能承载“百万级”并发等待,把“等待”变得便宜。
 

2. 虚拟线程是什么:一句话与关键特性
 
一句话:虚拟线程是由 JVM 管理调度的轻量线程,运行在少量平台线程之上,阻塞时可“卸载”,不占用载体线程。
 
关键特性:
 
轻量:创建一个虚拟线程几乎像创建一个对象
 
同步风格:继续写 try/catch、顺序代码,不必到处 thenCompose
 
按需调度:JVM 将虚拟线程映射到一组平台线程(载体线程)
 
阻塞可扩展:遇到可识别的阻塞点(典型是 I/O、LockSupport.park 等),JVM 能把它从载体线程卸下来
 

3. 核心原理:载体线程、调度与“停靠/卸载”
 
理解虚拟线程,抓住三个名词就够了:
 
Virtual Thread(虚拟线程):你的业务代码运行所在的线程抽象
 
Carrier Thread(载体线程):真正的 OS 线程,承载虚拟线程执行
 
Mount/Unmount(挂载/卸载):虚拟线程运行时挂到载体线程上;阻塞时从载体线程卸下来,载体线程继续跑别的虚拟线程
 
当虚拟线程执行到阻塞操作时,JVM 会尽可能把阻塞“变成可停靠”:
 
如果阻塞点可被 Loom 管控(例如常见 I/O、park 等),虚拟线程会 park,并 unmount,载体线程被释放
 
如果发生 Pinning(被钉住),虚拟线程阻塞时 无法卸载,载体线程也被卡住,扩展性会急剧下降

 
 
 
------分隔线----------------------------


锋哥推荐