线程状态

线程状态

在操作系统层面,线程共有五种状态:

  • 初始状态:仅是在语言层面创建了线程对象,还未与操作系统线程关联

  • 可运行状态(就绪状态):指该线程已经被创建(与操作系统线程关联),可以由 CPU 调度执行

  • 运行状态:指获取了 CPU 时间片运行中的状态

    • 当 CPU 时间片用完,会从【运行状态】转换至【可运行状态】,会导致线程的上下文切换
  • 阻塞状态:如果调用了阻塞 API,如 BIO 读写文件,这时该线程实际不会用到 CPU,会导致线程上下文切换,进入阻塞状态,等 BIO 操作完毕,会由操作系统唤醒阻塞的线程,转换至可运行状态

  • 终止状态:表示线程已经执行完毕,生命周期已经结束,不会再转换为其它状态

在Java中,线程可以分为六种状态:

  • NEW(新建):线程已经被创建,但尚未启动。

  • RUNNABLE(可运行):Java API 层面的 RUNNABLE 状态涵盖了 操作系统 层面的 可运行状态、运行状态和阻塞状态(由于 BIO 导致的线程阻塞,在 Java 里无法区分,仍然认为 是可运行)

java 复制代码
thread.start(); // 调用start()方法后,线程进入RUNNABLE状态
  • BLOCKED(阻塞):线程正在等待获取一个监视器锁。
java 复制代码
public synchronized void synchronizedMethod() {
 // 线程在此处等待获取锁
}

// 另一线程
synchronized(this) {
    // 其他线程持有锁,导致当前线程阻塞
}
  • WAITING(等待):线程正在无限期地等待另一个线程执行特定操作。
java 复制代码
synchronized(obj) {
    try {
        obj.wait(); // 当前线程进入WAITING状态
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}
  • TIMED_WAITING(限时等待):线程正在等待另一个线程执行操作,但设置了最长等待时间,或者使用Thread.sleep()。
java 复制代码
synchronized(obj) {
    try {
        obj.wait(1000); // 当前线程进入TIMED_WAITING状态,最多等待1000毫秒
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}
  • TERMINATED(终止):线程已经完成执行或因异常而终止。
相关推荐
jyOverQ31 分钟前
从零学 JVM(七):垃圾收集器详解——Serial、ParNew、Parallel、CMS 与 G1
java·jvm
liangbo739 分钟前
Spring系列11:切点表达式
java·spring
3095566661 小时前
股票接口返回 404 与空数组的排查笔记:证书状态与级别参数
java·笔记·python·ios·iphone·股票数据api·股票数据接口
nice_lcj5201 小时前
MySQL 存储引擎入门:InnoDB 和 MyISAM 到底怎么选
java·数据库·mysql·面试·innodb·存储引擎·myisam
文丑颜不良啊1 小时前
LeetCode2861~2880题目解析
java·leetcode
装不满的克莱因瓶1 小时前
设计模式之策略模式核心概念和应用场景
java·后端·设计模式·架构·系统架构·策略模式
晴天的雨.9922 小时前
【C++】继承篇
java·开发语言·c++
SomeOtherTime2 小时前
第 1 讲:内存布局与所有权解剖——栈帧、胖指针与“移动/拷贝”在汇编层面的真实面目
java·开发语言·汇编
qq_406981032 小时前
c++ lamda(三)Lambda表达式
java·前端·c++
头发还在的女程序员2 小时前
Java在线租房系统源码解析:Spring Boot+Vue 3+UniApp房源管理与预约看房方案
java·vue.js·spring boot·租房小程序·租房系统·租房软件