腾讯面试官必问:进程和线程的区别?线程生命周期与状态转换?90%开发者答不完整!

前言

Java 并发面试基础必考题天花板:进程与线程区别、线程七大状态与流转流程。

很多面试者只会一句:进程资源独立,线程共享资源
一旦面试官追问:
线程有几种状态?WAITING 和 BLOCKED 区别?RUNNABLE 到底是不是正在运行?状态流转顺序?

绝大多数人直接混乱翻车。

本篇一次性讲透 进程线程核心区别 + 线程完整生命周期 + 所有状态转换规则,零基础也能看懂,面试直接背诵满分!

一、什么是进程、什么是线程

进程

操作系统资源分配的最小单位
进程是独立运行的程序,拥有独立内存空间、堆、文件资源,进程之间完全隔离。

线程

CPU 调度的最小单位
线程隶属于进程,一个进程包含多个线程,线程共享进程资源,栈私有。

二、进程和线程的核心区别(面试必背)

  1. 资源隔离不同
    进程:资源独立,互不干扰。
    线程:共享进程堆、方法区资源,仅栈空间私有。

  2. 开销不同
    进程:创建、销毁、切换开销极大。
    线程:轻量级,开销极小。

  3. 通信方式不同
    进程:IPC管道、socket,通信复杂。
    线程:直接共享变量,通信简单。

  4. 独立性不同
    进程崩溃互不影响。
    一个线程异常崩溃,整个进程直接挂掉

  5. 粒度不同
    进程:资源分配单位
    线程:CPU调度执行单位

三、总结一句话区分

进程是资源仓库,线程是干活的工人。

四、Java 线程的 6 大状态(JDK 定义)

Java 线程一共 6 种状态(面试必考,不是5种!)

  1. NEW(新建)
    线程创建完毕,未调用 start(),未启动。

  2. RUNNABLE(就绪/运行中)
    包含两种情况:

  • 正在 CPU 运行
  • 等待 CPU 时间片

重点:Java 没有单独的 Running 状态!

  1. BLOCKED(阻塞)
    等待获取 synchronized 锁,锁被占用导致阻塞。

  2. WAITING(无限等待)
    主动休眠,无超时,不主动唤醒永远不醒
    触发:wait()join()

  3. TIMED_WAITING(限时等待)
    限时休眠,时间到自动唤醒
    触发:sleep()wait(时间)join(时间)

  4. TERMINATED(终止)
    线程执行完毕,彻底结束。

五、核心难点:BLOCKED / WAITING 区别(面试高频)

  • BLOCKED:抢锁失败被动阻塞
    是因为别人拿着锁,自己进不去,被动等待。

  • WAITING:自己主动躺平等待
    主动放弃 CPU,等待别人唤醒。

六、线程完整状态流转全过程(满分必背)

  1. NEW → 调用 start() → RUNNABLE
  2. RUNNABLE 抢到 CPU → 运行
  3. RUNNABLE 遇 synchronized 抢锁失败 → BLOCKED
  4. RUNNABLE 调用 wait/join → WAITING
  5. RUNNABLE 调用 sleep → TIMED_WAITING
  6. BLOCKED/WAITING/TIMED_WAITING 唤醒后 → 回到 RUNNABLE
  7. 代码执行结束 → TERMINATED

极简流转口诀

新建启动可运行,抢锁阻塞,等待休眠,执行结束终止。

七、面试满分标准回答(直接背诵)

进程是操作系统资源分配的最小单位,线程是CPU调度的最小单位。
进程资源独立、开销大、隔离性强;线程共享进程资源、开销小、通信简单,线程崩溃会导致整个进程退出。

Java线程一共有六种状态:NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED。
线程启动后进入可运行状态,抢锁失败进入阻塞、调用等待方法进入无限等待、调用sleep进入限时等待,所有阻塞等待被唤醒后都会回到可运行状态,代码执行完毕进入终止状态。

其中 BLOCKED 是抢锁被动阻塞,WAITING 是主动休眠等待。

八、高频面试误区纠正

❌ 误区1:Java线程有 Running 状态
错!JDK 没有 Running,统一叫 RUNNABLE

❌ 误区2:WAITING 和 BLOCKED 一样
完全不同:一个主动、一个被动

❌ 误区3:线程休眠属于 BLOCKED
错!sleep 是 TIMED_WAITING

总结

进程线程区别考资源与粒度,线程生命周期考6大状态+流转
只要分清:阻塞是抢锁、等待是休眠、可运行包含运行与就绪,这道面试题直接满分。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐