| 失效链接处理 |
|
深入浅出 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(被钉住),虚拟线程阻塞时 无法卸载,载体线程也被卡住,扩展性会急剧下降
|


苏公网安备 32061202001004号
