了解下线程

​​1. 操作系统层面的线程状态(5种)​​

这是通用操作系统(如Linux、Windows)中线程的生命周期状态:

  1. ​​新建(New)​​:线程被创建但尚未启动。
  2. ​​就绪(Ready)​​:线程已启动,等待CPU分配时间片。
  3. ​​运行(Running)​​:线程获得CPU时间片,正在执行代码。
  4. ​​阻塞(Blocked)​​:线程因等待I/O操作、锁释放等资源而暂停执行,释放CPU资源。
  5. ​​终止(Terminated)​​:线程执行完毕或异常退出,释放所有资源

2. Java语言层面的线程状态(6种)​​

Java在java.lang.Thread.State枚举中明确定义了6种状态,与操作系统状态存在映射关系:

​​Java状态​​​​操作系统对应状态​​​​触发条件​​
​​NEW​​ 新建 线程被创建(new Thread()),但未调用start()
​​RUNNABLE​​ 就绪/运行 调用start()后,线程可能正在运行或等待CPU调度
​​BLOCKED​​ 阻塞 等待获取synchronized锁(其他线程持有锁时)
​​WAITING​​ 阻塞 无限期等待唤醒(如Object.wait()Thread.join()
​​TIMED_WAITING​​ 阻塞 有限期等待(如Thread.sleep(n)Object.wait(timeout)
​​TERMINATED​​ 终止 线程执行完毕(run()结束)或抛出未捕获异常

 

3. 关键差异说明​​

    • ​​RUNNABLE状态的合并​​:
      Java将操作系统的​​就绪(Ready)​​ 和 ​​运行(Running)​​ 合并为RUNNABLE状态,因为JVM不区分线程是否正在占用CPU
    • ​​细化等待状态​​:
      Java将操作系统的​​阻塞(Blocked)​​ 细分为BLOCKEDWAITINGTIMED_WAITING,以更精确描述线程暂停的原因
    • ​​阻塞与等待的区别​​:
      • BLOCKED:竞争锁失败(被动等待)
      • WAITING/TIMED_WAITING:主动调用方法释放CPU(如wait()sleep()
posted @ 2025-07-16 16:02  joshua317  阅读(11)  评论(0)    收藏  举报