扫码阅读
手机扫码阅读
线程包括哪些状态,状态之间是如何变化?

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


springboot葵花宝典
扫码关注公众号
线程状态及变化摘要
1. 线程状态 - 六种状态
在 Java 中,线程状态可以参考 JDK 中的 Thread
类中的枚举 State
,包括以下六种状态:
-
新建 (NEW): 线程对象被创建但未调用
start
方法,尚未与操作系统底层线程关联。 -
可运行 (RUNNABLE): 调用
start
方法后进入可运行状态,与底层线程关联,由操作系统调度执行。 - 终结 (TERMINATED): 线程代码执行完毕后进入终结状态,与底层线程取消关联。
- 阻塞 (BLOCKED): 线程获取锁失败后进入阻塞队列,不占用 CPU 时间,持锁线程释放锁后唤醒,恢复至可运行状态。
-
等待 (WAITING): 线程因条件不满足调用
wait()
方法进入等待集合等待,需通过notify()
或notifyAll()
唤醒。 -
有时限等待 (TIMED_WAITING): 线程调用
wait(long)
或sleep(long)
方法进入有时限等待状态,超时或被唤醒后恢复至可运行状态。
2. 线程状态 - 五种状态
从操作系统层面,线程可以划分为以下五种状态:
- 运行态: 分配到 CPU 时间,线程真正执行代码。
- 就绪态: 有资格分到 CPU 时间,但尚未轮到执行。
- 阻塞态: 无资格分配到 CPU 时间,包括阻塞、等待、有时限等待和阻塞 I/O。
- 新建态: 与 Java 中的新建状态类似。
- 终结态: 与 Java 中的终结状态类似。
3. wait
和 sleep
方法的不同
两者的相同点是都会让当前线程暂时放弃 CPU 使用权,但在以下方面存在不同:
-
方法归属:
sleep
是Thread
的静态方法,而wait
是Object
的成员方法。 -
醒来时机:
sleep
按超时时间自然醒来;wait
需被notify
唤醒或超时醒来。 -
锁特性:
wait
方法会释放对象锁,而sleep
不释放锁。
4. 面试问题总结
面试常见问题是关于线程状态及其相互转换。主要状态包括新建、可运行、终结、阻塞、等待和有时限等待。状态转换涉及:
- 从新建到可运行:调用
start
方法。 - 从可运行到终结:线程代码执行完毕。
- 从可运行到阻塞:获取锁失败,进入阻塞队列。
- 从可运行到等待:条件不满足调用
wait()
方法。 - 从可运行到有时限等待:调用
wait(long)
或sleep(long)
方法。
希望本文对您有所帮助,欢迎点赞、收藏或分享支持!
想要了解更多内容?


springboot葵花宝典
扫码关注公众号
springboot葵花宝典的其他文章
国庆与中秋双节:科技奇迹的融合盛宴
国庆与中秋双节:科技奇迹的融合盛宴这是我使用chatgpt和ai生图结合写的庆祝我们国庆中秋以及国家欣欣向荣
# 从 0 到 1,掌握logback
从 0 到 1,掌握logback1. logback 日志的作用记录系统和接口的使用情况,比如请求日志记录
MinIO快速入门指南:构建自己的云存储服务
云存储服务在现代应用中变得越来越重要,不仅对于数据备份和恢复,还对于大数据分析、静态网站托管等应用。而**MinIO是一个开源的云存储服务器,它可以帮助你快速构建自己的云存储服务,无论是私有云还是公有云**。
Elasticsearch(ES)的DSL语法与搜索
Elasticsearch(ES)的DSL语法与搜索
SpringBoot-5-页面展示Thymeleaf
本文主要介绍SpringBoot使用 Thymeleaf开发Web页面
加入社区微信群
与行业大咖零距离交流学习


PMO实践白皮书
白皮书上线
白皮书上线