扫码阅读
手机扫码阅读

线程包括哪些状态,状态之间是如何变化?

186 2024-07-17

我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。

查看原文:线程包括哪些状态,状态之间是如何变化?
文章来源:
springboot葵花宝典
扫码关注公众号

线程状态及其变化概述

本文总结了线程的六种状态以及它们之间的转换,同时对比了操作系统层面的线程状态,并解释了wait和sleep方法的异同。

1. 线程状态 - 六种状态

  • 新建(NEW): 创建线程对象后,未调用start方法。
  • 可运行(RUNNABLE): 调用start方法后,线程可被操作系统调度。
  • 阻塞(BLOCKED): 获取锁失败时,进入阻塞队列。
  • 等待(WAITING): 调用wait()方法后,释放锁并等待。
  • 有时限等待(TIMED_WAITING): 调用wait(long)或sleep(long)方法后,进入有时限的等待状态。
  • 终结(TERMINATED): 线程运行结束后的状态。

线程状态可以通过锁的获取与释放、等待时间的到来或打断等方式进行转换。

2. 线程状态 - 五种状态

  • 运行态:线程正在执行。
  • 就绪态:线程准备好执行,但尚未获得CPU时间。
  • 阻塞态:包括Java的阻塞、等待、有时限等待状态,以及阻塞I/O操作。
  • 新建与终结态:与Java中的同名状态相似。

3. wait和sleep方法的不同

  • 归属不同:sleep是Thread类的,wait是Object类的方法。
  • 唤醒时机不同:wait可以被notify唤醒,sleep不行。
  • 锁特性不同:wait释放锁,sleep不释放锁。

4. 线程状态面试题

候选人需要了解六种状态的转换,包括新建到可运行,可运行到终结,以及阻塞、等待、有时限等待状态的转换机制。

文末提醒,本文原创不易,转载请注明出处。如果本文有帮助,欢迎转发分享。

想要了解更多内容?

查看原文:线程包括哪些状态,状态之间是如何变化?
文章来源:
springboot葵花宝典
扫码关注公众号