news 2026/8/27 11:44:48

JDK21-虚拟线程(原理)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
JDK21-虚拟线程(原理)

一、先给结论

虚拟线程不是不运行在 OS 线程上,而是:
只在“真正需要 CPU 时”才短暂占用 OS 线程。
在 IO 等待时,JVM 会把它“卸载”下来。


二、为什么传统线程一定占用 OS 线程?

1️⃣ Java 线程 = OS 线程(1:1)

在 Java 21 之前:

JavaThread<==>OSThread

当你写:

Threadt=newThread(()->httpCall());t.start();

本质是:

  • JVM 调用pthread_create
  • 创建一个真实的内核线程
  • 栈、调度、阻塞全交给操作系统

2️⃣ OS 不懂“这是 IO 等待”

当线程调用:

socket.read();

操作系统只知道一件事:

“这个线程现在在等数据”

于是:

  • OS 把线程状态设为BLOCKED
  • 线程仍然存在
  • 仍然占:
    • 内核线程结构
    • 栈内存
    • 调度成本

📌OS 无法把这个线程“拆掉”再给别人用


三、虚拟线程是如何“骗过”操作系统的?

关键思想:

👉阻塞不交给 OS,而是交给 JVM


1️⃣ 虚拟线程的真实结构

Virtual Thread(JVM对象) | |--- Continuation(可挂起的执行体) | |--- 运行在 ↓ Carrier Thread(少量 OS 线程)

Carrier Thread 才是真正的 OS 线程


2️⃣ JVM 在关键 IO 点“插手”了

虚拟线程的核心魔法在这里👇

传统线程:

Thread | |-- socket.read() | |-- OS 阻塞线程

虚拟线程:

VirtualThread | |-- socket.read() | |-- JVM 拦截 | |-- 保存当前执行现场(Continuation) |-- 从 Carrier Thread 上卸载 |-- 把 Carrier Thread 还给调度器

📌OS 完全不知道有这么回事


3️⃣ JVM 怎么知道“这是 IO”?

因为:

👉 JDK 的 IO 被“改造”了(关键)

以下 API 在虚拟线程下是可挂起的

  • Socket
  • HttpClient
  • InputStream / OutputStream
  • Selector
  • NIO

JDK 内部逻辑(简化):

if(currentThread.isVirtual()){parkContinuation();}else{blockOSThread();}

四、Continuation:真正的“黑科技”

1️⃣ 什么是 Continuation?

你可以理解为:

一个可以暂停 / 恢复的调用栈快照

它保存了:

  • 当前方法栈
  • 局部变量
  • 执行位置

2️⃣ 挂起时发生了什么?

┌──────────────┐ │ 方法 A │ │ 方法 B │ │ 方法 C <-- 当前执行点 └──────────────┘

JVM 做了:

  1. 把这段执行栈复制到堆内存
  2. 解绑当前 OS 线程
  3. 标记为 WAITING

3️⃣ 恢复时发生了什么?

当 IO 就绪:

  1. JVM 选一个空闲 Carrier Thread
  2. 把 Continuation 装回去
  3. 从 C 方法继续执行

👉就像什么都没发生过


五、为什么说“虚拟线程不占用 OS 线程”?

更准确的说法是:

**虚拟线程在“运行时”才占用 OS 线程
**在“等待时”不占用 OS 线程

对比:

状态传统线程虚拟线程
执行 CPU占 OS 线程占 OS 线程
等 IO仍占 OS 线程❌ 不占
空闲不占

六、这就是为什么并发能暴涨 100 倍

假设:

  • OS 线程池:200
  • IO 等待时间:95%

传统模型:

200 个线程 ≈ 190 个在等 IO ≈ 10 个在干活

虚拟线程模型:

200 个 Carrier Thread + 100,000 个 Virtual Thread ≈ 99,500 个在挂起 ≈ 500 个随时可运行

七、为什么你“几乎不用改代码”?

因为:

  • 同步 API 没变
  • try/catch 没变
  • ThreadLocal 可用
  • JDBC / HTTPClient 可用

JVM在你看不到的地方做了调度革命。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/26 14:15:37

Navicat Premium MacOS:原生或通过 Rosetta 运行教程

目前&#xff0c;Navicat 系列产品已支持在搭载 Apple Silicon 芯片的 Apple 设备上运行。Navicat Premium 16.3 (或更高版本) 可原生支持 MySQL、Redis、PostgreSQL、MongoDB、SQL Server、MariaDB、SQLite、GaussDB、OceanBase 等数据库的管理开发工作&#xff0c;为 Mac 用户…

作者头像 李华
网站建设 2026/8/25 10:40:20

谷歌Gemini变身免费家教:接入全真模考,错题还能掰碎了讲

从现在起&#xff0c;备考SAT的学生可以免费通过Gemini进行模拟考试&#xff0c;分数立等可取&#xff0c;还能帮你讲解错题。谷歌来给考生送福利了&#xff01;从现在起&#xff0c;备考SAT的学生可以免费通过Gemini进行模拟考试&#xff0c;分数立等可取&#xff0c;还能帮你…

作者头像 李华
网站建设 2026/8/25 7:19:41

曝光马斯克AGI秘密的他,被xAI开除了?

马斯克「Macrohard」&#xff08;巨硬&#xff09;黑幕曝光&#xff01;xAI工程师爆料&#xff1a;AI智能体将8倍速模拟人类&#xff0c;或取代亿万白领岗位。一期播客上线。四天&#xff0c;相关片段在X上冲到460万观看。人火了&#xff0c;但工作却没了。在播客《Relentless》…

作者头像 李华
网站建设 2026/8/26 5:21:45

导师严选2026 AI论文平台TOP9:继续教育写作全攻略

导师严选2026 AI论文平台TOP9&#xff1a;继续教育写作全攻略 2026年AI论文平台测评&#xff1a;为何需要一份精准的推荐榜单 在当前学术研究日益数字化的背景下&#xff0c;AI写作工具已成为高校师生、科研人员提升效率的重要助手。然而&#xff0c;面对市场上琳琅满目的产品&…

作者头像 李华
网站建设 2026/8/26 14:13:05

YOLOv13 RAB(Residual Attention Block)原理深度解析:多级残差 + 空间注意力的创新设计与应用

RAB模块原理深度解析:YOLOv13中的创新与应用教程 文章目录 RAB模块原理深度解析:YOLOv13中的创新与应用教程 1. 引言:深度学习架构演进与YOLOv13的创新 1.1 目标检测任务的挑战与YOLO系列的崛起 1.2 C2f模块: 1.3 RAB模块:创新驱动的性能飞跃 2. 背景回顾:YOLO中的C2f模块…

作者头像 李华