Java 线程的状态

Java 线程的状态

  • 线程的状态分为 NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING 和 TERMINATED 六种状态
  • 可以通过 Thread#getState 方法获取线程状态
java 复制代码
public static enum State {
    NEW,
    RUNNABLE,
    BLOCKED,
    WAITING,
    TIMED_WAITING,
    TERMINATED;

    private State() {
    }
}

NEW 新建

  • 线程被创建但尚未调用 Thread#start 方法,此时线程仅占用内存,不占用 CPU 资源

RUNNABLE 运行

  • 线程已调用 Thread#start 方法,可能正在运行(已经获取 CPU 时间片)或者是在等待调度的就绪状态

BLOCKED 阻塞

  • 线程请求锁资源因等待(比如 synchronized 同步锁,此时锁被其他线程持有)而被阻塞,不占用 CPU 资源,获得锁后线程会重新进入 RUNNABLE 状态

WAITING 等待

  • 线程主动进入无限期等待(比如 Object#wait 和 Thread#join 等),进入无限期等待,直到其他线程显式唤醒(比如 Object#notify 或 Object#notifyAll),重新进入 RUNNABLE 状态

TIMED_WAITING 超时等待

  • 线程进入带有超时时间的等待状态(比如 Object#wait(long)、Thread#join(long) 和 Thread#sleep(long) 等)
  • 与 WAITING 类似,但等待时间有限,超时后自动恢复为 RUNNABLE 状态

TERMINATED 终止

  • 线程执行完毕或者在执行过程中因出现异常而异常退出
  • 一旦线程进入终止状态,它就不能再次被启动
java 复制代码
//状态流转
NEW -> RUNNABLE -> BLOCKED/WAITING/TIMED_WAITING -> RUNNABLE -> TERMINATED
相关推荐
Bazingga1 小时前
Java16 record 完整拆解——语法、语义、限制、反射
java·后端
SL_staff3 小时前
规则联动:给工厂装上‘自动化神经反射弧’——JVS·物联网平台规则引擎实战教程
java·人工智能·物联网
骑着蜗牛撵大象3273 小时前
Linux 进程间通信之管道:从 pipe() 的内核语义到 FIFO 落地排错
android·java·linux·系统编程·fifo·管道·进程间通信
WJ.Polar3 小时前
Java封装、继承、多态
java·开发语言
ly76893 小时前
PostgreSQL 备份恢复策略:pg_basebackup、WAL 归档与 PITR 在企业 Java 系统中的落地
java·数据库·postgresql·pitr·pg_basebackup·wal 归档
摇滚侠3 小时前
Java 中如何表示负数,有符号和无符号的区别,补码的计算规则,char byte short int long 的范围
java·开发语言
奇牙coding4 小时前
Codex CLI 升级后多文件编辑静默失效:config.yaml 枚举变更排查与修复指南
java·前端·javascript·ai
小羊没烦恼!4 小时前
Ajax与JSON的一些总结
android·java·前端·数据库·mysql·算法·okhttp
Lhappy嘻嘻4 小时前
读懂 JVM:内存模型、类加载机制、分代回收
java·开发语言·jvm
黄俊懿4 小时前
【架构师从入门到进阶】第六章:服务集群优化——第八节:线程数公式
java·服务器·数据库·分布式·性能优化·架构·系统架构