尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

[硬核对比] 进程 vs 线程 vs Java线程:状态模型的“套娃”游戏

[硬核对比] 进程 vs 线程 vs Java线程:状态模型的“套娃”游戏
📅 发布时间:2026/6/18 22:36:30

[硬核对比] 进程 vs 线程 vs Java线程:状态模型的“套娃”游戏

[硬核对比] 进程 vs 线程 vs Java线程:状态模型的“套娃”游戏

作者: YUNGUI
标签: #操作系统 #Java #多线程 #面试必问


引言

在面试中,我们经常会被问到“线程的状态”。
这时候,如果你的回答是“就绪、运行、阻塞...”,面试官可能会追问:“那 Java 里的 TIMED_WAITING 是什么?”
如果你回答是“New, Runnable, Blocked...”,面试官又可能会问:“那 CPU 正在执行的时候,线程处于什么状态?”

很多人晕就晕在,操作系统理论的状态模型和编程语言(Java)实现的 API 模型并不完全是一回事。

今天我们就把这三个概念:进程状态、OS 线程状态、Java 线程状态,放在一起做一个彻底的对比和映射。


第一层:操作系统的经典视角 (进程/线程通用)

在操作系统原理课本中,无论是进程还是线程,为了管理它们的生命周期,都遵循经典的 “五态模型”。

这是最底层的逻辑,描述了 CPU 调度和资源等待的基本规则。

  1. 新建 (New):创建中,资源(PCB/TCB)还没分配好。
  2. 就绪 (Ready):万事俱备,只欠 CPU。在就绪队列排队,一旦抢到时间片就能跑。
  3. 运行 (Running):正在 CPU 上狂奔。
  4. 阻塞 (Blocked):被迫停下来。等待磁盘 I/O、网卡数据或锁。注意:此时给它 CPU 它也干不了活。
  5. 终止 (Terminated):任务结束,资源回收。

📊 经典五态流转图

graph LRNew(新建) --> Ready(就绪)Ready -->|获得时间片| Running(运行)Running -->|时间片用完| ReadyRunning -->|等待I/O或锁| Blocked(阻塞)Blocked -->|事件完成| ReadyRunning -->|执行结束| Terminated(终止)style Running fill:#f96,stroke:#333

进程 vs 线程的区别:
虽然状态名字一样,但进程切换涉及内存页表切换,开销巨大;线程切换只涉及寄存器上下文,开销很小。现代 OS 调度的是线程,进程只是资源的容器。


第二层:Java 语言的独特视角 (The JVM Way)

当你打开 JDK 源码查看 Thread.State 枚举时,你会发现它定义了 6 种状态,而且跟操作系统的 5 种状态对不上号。

public enum State {NEW,RUNNABLE,      // 重点!BLOCKED,       // 锁阻塞WAITING,       // 无限等待TIMED_WAITING, // 超时等待TERMINATED;
}

为什么 Java 要搞特殊?我们来看看这 6 种状态的具体含义。

1. NEW (新建)

线程对象被创建(new Thread()),但还没有调用 start() 方法。此时它只是堆内存里的一个普通对象。

2. RUNNABLE (可运行) —— 最大的误区!

这是 Java 最独特的设计。Java 的 RUNNABLE 状态,实际上涵盖了操作系统的【就绪 Ready】和【运行 Running】两个状态。

  • 为什么合并?
    因为在现代分时操作系统中,CPU 的时间片切换非常快(毫秒级)。一个线程在“运行”和“就绪”之间反复横跳,JVM 如果要实时去追踪这个微小的状态变化,开销太大且没有意义。
  • 结论:只要线程愿意干活(没被阻塞),不管它现在是正在干活(Running),还是在排队等活(Ready),在 Java 眼里它都是 RUNNABLE。

3. BLOCKED (阻塞)

这里的阻塞是非常狭义的。只有一种情况会让 Java 线程进入 BLOCKED:

  • 等待 synchronized 锁(Monitor Lock)。
  • 注意:调用 Lock 接口(JUC)等待,并不属于 BLOCKED,而是 WAITING。

4. WAITING (无限等待)

表示线程在等待另一个线程执行特定动作。需要被手动唤醒(notify)。

  • 常见场景:Object.wait()、Thread.join()、LockSupport.park()。

5. TIMED_WAITING (超时等待)

和 WAITING 类似,但它有个闹钟,时间到了自己会醒。

  • 常见场景:Thread.sleep(1000)、Object.wait(1000)。

6. TERMINATED (终止)

线程的 run() 方法执行结束。


第三层:上帝视角——OS 与 Java 的状态映射

现在,我们把操作系统的 5 态和 Java 的 6 态拼在一起,就能看清真相了。

🧩 状态映射关系表

操作系统状态 (OS) Java 线程状态 (JVM) 说明
New (新建) NEW 没啥区别,都是刚生出来。
Ready (就绪) RUNNABLE Java 不区分你是正在跑还是在排队,
统称“能跑 (Runnable)”。
Running (运行) RUNNABLE 同上。
Blocked (阻塞) BLOCKED 特指等待 synchronized 隐式锁。
Blocked (阻塞) WAITING 等待 notify 或显式锁 ReentrantLock。
Blocked (阻塞) TIMED_WAITING 等待 sleep 或超时唤醒。
Terminated (结束) TERMINATED 任务结束。

⚠️ 一个有趣的特例:I/O 阻塞去哪了?

当 Java 线程进行网络 I/O 或磁盘 I/O(比如读大文件)时,在操作系统层面,线程通过系统调用进入了内核态,此时它是 阻塞 (Blocked) 的,因为要等硬盘转圈圈。

但在 Java 层面,该线程的状态依然是 RUNNABLE!

  • 原因:Java 认为 I/O 阻塞是操作系统的事,JVM 并不关心(或者说它认为这只是代码执行过程中的一段耗时操作)。只有涉及到 Java 层面的锁竞争或显式等待,JVM 才会标记为阻塞/等待。

终极图解:Java 线程生命周期全景

stateDiagram-v2[*] --> NEW: new Thread()NEW --> RUNNABLE: start()state RUNNABLE {direction LROS_Ready(OS: 就绪)OS_Running(OS: 运行)OS_Ready <--> OS_Running: CPU 调度}RUNNABLE --> BLOCKED: synchronized 没抢到锁BLOCKED --> RUNNABLE: 抢到锁了RUNNABLE --> WAITING: wait() / join() / park()WAITING --> RUNNABLE: notify() / unpark()RUNNABLE --> TIMED_WAITING: sleep(t) / wait(t)TIMED_WAITING --> RUNNABLE: 时间到了 / notify()RUNNABLE --> TERMINATED: run() 结束TERMINATED --> [*]note right of RUNNABLEJava 的 RUNNABLE 包含OS 的 Ready 和 Running。甚至包含 OS 的磁盘I/O 阻塞。end note

总结

  • 五种状态是操作系统教科书的标准,用来描述所有进程/线程的底层行为。
  • 六种状态是 Java API 的定义,它是为了配合 Java 语言特性(如 synchronized、wait/notify)而设计的抽象。
  • 最大的坑:Java 没有 Running 状态,它把 Running 和 Ready 打包成了 RUNNABLE。

相关新闻

  • Git安装详细版
  • 每日反思(2025年12月7号)
  • 记我第一次代码审计 (bluecmsv1.6的sql注入复现)

最新新闻

  • M2.7自主进化:AI生长体的元认知闭环与企业级沙盒治理
  • MC68HC16Y3微控制器架构解析:CPU16、TPU、ADC与系统设计实战
  • 当前需要AI解决的问题
  • 可编辑的pdf转ppt免费工具?2026免费888PDF转换器PDF转PPT可编辑实测 - 工具测试专家
  • 2026年洛阳西工TOP5不坑人电器门店,凭啥成为市民首选?
  • Fcitx5-android输入法框架架构深度解析:模块化设计的艺术与实践

日新闻

  • 2026年不锈钢卷板厂家推荐排行榜:冷轧热轧/304/201不锈钢卷板,高颜值耐腐蚀源头厂家实力精选 - 企业推荐官【官方】
  • FLUX.1-dev FP8模型实战指南:24GB以下显卡高效部署方案
  • 2026佛山长途搬家价目表:跨省跨市搬家费用完整计算指南 - 从来都是英雄出少年

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号