【Java基础】线程的五大状态

新建状态

使用 new 关键字和 Thread 类或其子类建立一个线程对象后,该线程对象就处于新建状态。它保持这个状态直到程序 start() 这个线程。

就绪状态

当线程对象调用了start()方法之后,该线程就进入就绪状态。就绪状态的线程处于就绪队列中,要等待JVM里线程调度器的调度。

此时具备争抢cpu的资格,还没抢到。

运行状态

如果就绪状态的线程获取 CPU 资源,就可以执行 run(),此时线程便处于运行状态。处于运行状态的线程最为复杂,它可以变为阻塞状态、就绪状态和死亡状态。

阻塞状态

如果一个线程执行了sleep(睡眠)、suspend(挂起)等方法,失去所占用资源之后,该线程就从运行状态进入阻塞状态。在睡眠时间已到或获得设备资源后可以重新进入就绪状态。可以分为三种:

  • 等待阻塞:运行状态中的线程执行 wait() 方法,使线程进入到等待阻塞状态。
  • 同步阻塞:线程在获取 synchronized 同步锁失败(因为同步锁被其他线程占用)。
  • 其他阻塞:通过调用线程的 sleep() 或 join() 发出了 I/O 请求时,线程就会进入到阻塞状态。当sleep() 状态超时,join() 等待线程终止或超时,或者 I/O 处理完毕,线程重新转入就绪状态。

处于阻塞状态时,该线程不具备争抢cpu的资格

死亡状态

一个运行状态的线程完成任务或者其他终止条件发生时,该线程就切换到终止状态。


相关推荐
计算机毕设指导6几秒前
基于微信小程序的旅游线路定制系统【源码文末联系】
java·spring boot·微信小程序·小程序·tomcat·maven·旅游
goodlook01235 分钟前
监控平台搭建-监控指标展示-Grafana篇(五)
java·算法·docker·grafana·prometheus
qq_12498707537 分钟前
基于Spring Boot的微信小程序的智慧商场系统的设计与实现
java·spring boot·spring·微信小程序·小程序·毕业设计·计算机毕业设计
椰羊~王小美8 分钟前
通用的导入、导出方法
java·spring boot
yaoxin5211239 分钟前
277. Java Stream API - 去重与排序:Stream 中的 distinct() 与 sorted()
java·开发语言
幽络源小助理13 分钟前
SpringBoot+Vue多维分类知识管理系统源码 | Java知识库项目免费下载 – 幽络源
java·vue.js·spring boot
不吃葱的胖虎15 分钟前
根据Excel模板,指定单元格坐标填充数据
java·excel
k***921615 分钟前
C语言模拟面向对象三大特性与C++实现对比
java·c语言·c++
野生技术架构师17 分钟前
SpringBoot健康检查完整指南,避免线上事故
java·spring boot·后端
黎雁·泠崖18 分钟前
C 语言预处理(下):宏与函数对比 +#/## 运算符 + 条件编译 + 头文件包含
c语言·开发语言