0

0

在Java里线程的生命周期包括哪些状态_Java线程状态管理解析

P粉602998670

P粉602998670

发布时间:2026-02-04 10:08:33

|

857人浏览过

|

来源于php中文网

原创

Java线程生命周期仅有6种状态:NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED,定义在Thread.State枚举中;它们非线性流转,由JVM依实际行为动态切换,且getState()不可用于线程控制逻辑。

在java里线程的生命周期包括哪些状态_java线程状态管理解析

Java线程的生命周期只有6种状态,全部定义在 Thread.State 枚举中,不是5种也不是7种,别被过时资料误导。

NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED 这六种状态怎么区分

它们不是按时间顺序线性流转的,而是由 JVM 根据线程实际行为动态切换:

  • NEW:线程对象已创建但 start() 没调用,此时调 isAlive() 返回 false
  • RUNNABLE:包含“正在 CPU 执行”和“就绪等待调度”两种情况,不等于正在运行;I/O 阻塞、synchronized 竞争失败都不会进这个状态
  • BLOCKED:只发生在进入 synchronized 同步块/方法时,因锁被其他线程持有而挂起
  • WAITING:调用 Object.wait()Thread.join()LockSupport.park() 且没设超时
  • TIMED_WAITING:调用带超时的 Thread.sleep(1000)Object.wait(500)LockSupport.parkNanos()
  • TERMINATED:线程 run() 方法正常结束或抛出未捕获异常后到达,不可逆

为什么 jstack 输出里看不到 RUNNABLE 却看到 “java.lang.Thread.State: RUNNABLE”

这是最常被误解的一点:RUNNABLE 是 JVM 线程状态,而操作系统层面的“running”或“runnable”是另一套概念。jstack 显示的 RUNNABLE 表示该线程在 JVM 看来“可运行”,但它可能正被 OS 调度器挂起、在执行 native 代码(如 IO)、甚至卡在用户态自旋锁里。

  • 真实 CPU 占用高?查 top -Hpidstat -t 看 OS 级线程状态
  • jstack 中长期显示 RUNNABLE 但无实际进展?大概率是 native 阻塞(如 socket read、JNI 调用)或死循环,JVM 无法感知
  • BLOCKEDWAITING 在 jstack 中会明确标出锁 ID 或等待对象,比 RUNNABLE 更容易定位问题

Thread.getState() 返回的状态不能用来做线程控制逻辑

因为状态检查和后续操作之间存在竞态:你刚读到 RUNNABLE,下一行它就进了 WAITING;或者读到 TERMINATED,其实只是刚好完成清理但堆内存还没回收完。

雾象
雾象

WaytoAGI推出的AI动画生成引擎

下载

立即学习Java免费学习笔记(深入)”;

  • 不要写 if (t.getState() == Thread.State.TERMINATED) { t.start(); } —— 报 IllegalThreadStateException
  • 不要靠轮询 getState() 判断线程是否结束,用 t.join()Future.isDone()
  • Thread.stop()Thread.suspend() 已废弃,它们依赖状态强制干预,极易导致锁残留和数据不一致

真正关键的是理解状态背后的资源语义:BLOCKED 关联 monitor 锁,WAITING/TIMED_WAITING 关联条件队列或 park 机制,而 RUNNABLE 是唯一不持有任何显式阻塞条件的状态——但它也最不透明。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

790

2023.08.22

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

400

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

579

2023.08.10

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

588

2023.08.10

Java 并发编程高级实践
Java 并发编程高级实践

本专题深入讲解 Java 在高并发开发中的核心技术,涵盖线程模型、Thread 与 Runnable、Lock 与 synchronized、原子类、并发容器、线程池(Executor 框架)、阻塞队列、并发工具类(CountDownLatch、Semaphore)、以及高并发系统设计中的关键策略。通过实战案例帮助学习者全面掌握构建高性能并发应用的工程能力。

87

2025.12.01

全国统一发票查询平台入口合集
全国统一发票查询平台入口合集

本专题整合了全国统一发票查询入口地址合集,阅读专题下面的文章了解更多详细入口。

37

2026.02.03

短剧入口地址汇总
短剧入口地址汇总

本专题整合了短剧app推荐平台,阅读专题下面的文章了解更多详细入口。

103

2026.02.03

植物大战僵尸版本入口地址汇总
植物大战僵尸版本入口地址汇总

本专题整合了植物大战僵尸版本入口地址汇总,前往文章中寻找想要的答案。

49

2026.02.03

c语言中/相关合集
c语言中/相关合集

本专题整合了c语言中/的用法、含义解释。阅读专题下面的文章了解更多详细内容。

9

2026.02.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 3.2万人学习

C# 教程
C# 教程

共94课时 | 8.5万人学习

Java 教程
Java 教程

共578课时 | 57.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号