面试鸭返利网

java线程状态转换图

Java线程状态转换是面试必考知识点,掌握六种状态(NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED)及其转换规则至关重要。本文详解Java线程状态转换图,包含mermaid流程图和实际案例分析,帮助理解BLOCKED与WAITING区别、sleep()与wait()差异等核心问题。附赠2025最新Java面试宝典下载,助你轻松应对线程状态面试题。想系统学习Java并发?面试鸭返利网提供大厂真题解析,购买会员可享25元返现优惠!

Java线程状态转换图

作为程序员,面试时被问"说说Java线程状态转换"的概率堪比被问HashMap原理。今天咱们就掰开揉碎讲透这张状态转换图,让你在面试中游刃有余!

一、线程的六种人生阶段

Java线程从出生到消亡共有6种状态:

  1. NEW:刚new Thread()但没调start(),就像领了工牌还没工位的萌新
  2. RUNNABLE:调用start()后的状态(注意:包含就绪和运行中!)
  3. BLOCKED:抢不到synchronized锁时的憋屈状态
  4. WAITING:调用wait()/join()后的望眼欲穿状态
  5. TIMED_WAITING:带超时的等待,比如Thread.sleep(1000)
  6. TERMINATED:线程run()执行完毕的退休状态

📎 2025最新Java面试宝典
点击下载(密码:9b3g)

二、状态转换核心路径

graph LR
    A[NEW] -->|start()| B(RUNNABLE)
    B -->|获取锁失败| C[BLOCKED]
    C -->|获取到锁| B
    B -->|wait()| D[WAITING]
    D -->|notify()| B
    B -->|sleep()| E[TIMED_WAITING]
    E -->|时间到| B
    B -->|run()结束| F[TERMINATED]

Java线程状态转换图

三、面试致命三连问破解

  1. BLOCKED和WAITING有什么区别?

    • BLOCKED是等锁(主动争抢)
    • WAITING是等条件(被动唤醒)
  2. sleep()和wait()的差别?

    // sleep()不释放锁,wait()会释放锁!
    synchronized(lock){
        Thread.sleep(1000); // 抱着锁睡觉
        lock.wait();        // 把锁交出去等人通知
    }
    
  3. RUNNABLE包含哪些状态?
    这是最容易踩的坑!RUNNABLE实际包含:

    • 就绪:等待CPU分配时间片
    • 运行中:正在执行任务

    查看状态用thread.getState(),别肉眼瞎猜!

四、高频翻车场景

当面试官问:"线程调用yield()会进入什么状态?"
正确答案:仍在RUNNABLE状态!yield()只是让出CPU,随时可能被再次调度

若被问"notify()后线程立刻执行吗?"
雷区回答:× 立刻执行
正确姿势:只是从WAITING进入BLOCKED状态,还得重新抢锁!

线程状态转换实战

五、避坑指南

  1. TIMED_WAITING≠定时器:比如Thread.sleep(1000)可能睡>1秒(看OS脸色)
  2. TERMINATED不可逆:线程结束就像泼出去的水,调用start()直接抛IllegalThreadStateException
  3. BLOCKED专为synchronized:用Lock接口的线程会进WAITING

💡 想系统性刷透Java并发题?悄悄告诉你:通过面试鸭返利网购买会员可返现25元,题库更新快还带大厂解析!


理解透这张线程状态转换图,面试时被问到并发问题起码能拿下60%分数。建议把转换图存手机里,上厕所时多看两眼,比背八股文管用多了!

>> 点击返回面试鸭返利网首页 <<
面试鸭返利网

如果你想获取更多关于面试鸭的优惠信息,可以访问面试鸭返利网面试鸭优惠网,了解最新的优惠活动和返利政策。

立即加入面试鸭会员 →