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
相关推荐
程序员黑豆18 分钟前
Java中的字符串【AI全栈开发】
java
namexingyun34 分钟前
开源前端生态如何成为 AI UI 生成的“燃料“:shadcn/ui、Tailwind CSS、Storybook 技术价值全解剖
java·前端·人工智能·python·ui·开源·ai编程
终将老去的穷苦程序员1 小时前
基于SpringBoot的餐饮管理系统
java·spring boot·后端
心之伊始1 小时前
Spring AI Tool Calling 实战:让 Java Agent 调用本地 Bean 工具方法
java·spring boot·agent·spring ai·tool calling
AI人工智能+电脑小能手1 小时前
【大白话说Java面试题 第110题】【并发篇】第10题:CAS 存在哪些问题?
java·开发语言·面试
瀚高PG实验室1 小时前
java中间件无法连接数据库
java·数据库·中间件·瀚高数据库
东南门吹雪1 小时前
JAVA TCP socket编程框架
java·高并发·socket·tcp·nio
xingyuzhisuan1 小时前
缓存命中率提升方案:从 30% 优化至 82% 全流程优化记录
java·开发语言·缓存·ai
一条泥憨鱼2 小时前
Java开发效率神器:Lombok从入门到精通!
java·后端·学习·开发·lombok
Jinkxs2 小时前
Python基础 - 初识内置函数 Python自带的便捷工具
android·java·python