扫码阅读
手机扫码阅读
线程包括哪些状态,状态之间是如何变化?
147 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葵花宝典
扫码关注公众号
springboot葵花宝典的其他文章
加入社区微信群
与行业大咖零距离交流学习
软件研发质量管理体系建设
白皮书上线