Java 中线程状态有哪些?

Java 中线程状态有哪些?写在前面本文隶属于专栏 100 个问题搞定 Java 并发 该专栏为笔者原创 引用请注明来源 不足和错误之处请在评论区帮忙指出 谢谢 本专栏目录结构和文献引用请见 100 个问题搞定 Java 并发解答线程的状态在 java 中有明确的定义 在 java lang Thread State 中有 6 种 NEW 线程被创建 未执行和运行的时候 RUNNABLE 不代表线程在跑 两种 被 cpu 执行的线程 随时可以被 cpu 执行的状态 BLOCKED 线程阻塞 处于 synchronized 同步代码块或方法中被

写在前面

本文隶属于专栏《100个问题搞定Java并发》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

本专栏目录结构和文献引用请见100个问题搞定Java并发

解答

线程的状态在java中有明确的定义,在java.lang.Thread.State中有6种。 ① NEW 线程被创建,未执行和运行的时候 ② RUNNABLE 不代表线程在跑,两种:被cpu执行的线程,随时可以被cpu执行的状态。 ③ BLOCKED 线程阻塞,处于synchronized同步代码块或方法中被阻塞。 ④ WAITING 等待线程的线程状态。线程当前不执行,如果被其他唤醒后会继续执行的状态。依赖另一个线程的通知的。这个等待是一直等,没人叫你,你起不来。 ⑤ TIMED_WAITING 指定等待时间的等待线程的线程状态。带超时的方式:Thread.sleep,Object.wait,Thread.join,LockSupport.parkNanos,LockSupport.parkUntil ⑥ TERMINATED 正常执行完毕或者出现异常终止的线程状态。 

补充

线程状态流转图

线程状态流转图

从NEW状态出发后,线程不能再回到NEW状态,同理,处于 TERMIINATED 状态的线程也不能再回到 RUNNABLE状态。

java.lang.Thread.State源码

/ * 线程状态。线程可以处于以下状态之一: * NEW:尚未启动的新线程处于此状态。 * RUNNABLE:在Java虚拟机中执行的线程处于此状态。 * BLOCKED:阻塞等待监视器锁定而被阻塞的线程处于此状态。 * WAITING:正在无限期等待另一个线程执行特定操作的线程处于此状态。 * TIMED_WAITING:TIMED_WAITING正在等待另一个线程执行某个操作达指定等待时间的线程处于此状态。 * TERMINATED:终止已退出的线程处于此状态。 * 

* 线程在给定的时间点只能处于一种状态。 * 这些状态是不反映任何操作系统线程状态的虚拟机状态。 * * @since 1.5 */

public enum State { / * 尚未启动的线程的线程状态。 */ NEW, / * 可运行线程的线程状态。处于可运行状态的线程正在Java虚拟机中执行,但它可能正在等待来自操作系统的其他资源,如处理器。 */ RUNNABLE, / * 阻塞等待一个监视器锁时的线程状态。 * 为了进入同步块/方法处于阻塞状态的线程会等待监视器锁,或在调用{@link Object#wait() Object.wait}后重新进入同步块/方法。 */ BLOCKED, / * 等待线程的线程状态。 * 由于调用以下方法之一,线程处于等待状态: *
    *
  • {@link Object#wait() Object.wait} with no timeout
  • *
  • {@link #join() Thread.join} with no timeout
  • *
  • {@link LockSupport#park() LockSupport.park}
  • *
* 处于等待状态的线程正在等待另一个线程执行特定操作。 *

* 例如,对某个对象调用Object.wait()的线程正在等待另一个线程对该对象调用Object.notify()Object.notifyAll()。 *

* 调用Thread.join()的线程正在等待指定的线程终止。 */

WAITING, / * 具有指定等待时间的等待线程的线程状态。 * 由于使用指定的正等待时间调用以下方法之一,线程处于定时等待状态: *
    *
  • {@link #sleep Thread.sleep}
  • *
  • {@link Object#wait(long) Object.wait} with timeout
  • *
  • {@link #join(long) Thread.join} with timeout
  • *
  • {@link LockSupport#parkNanos LockSupport.parkNanos}
  • *
  • {@link LockSupport#parkUntil LockSupport.parkUntil}
  • *
*/
TIMED_WAITING, / * 终止线程的线程状态。线程已完成执行。 */ TERMINATED; }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/228918.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午5:53
下一篇 2026年3月16日 下午5:53


相关推荐

  • pycharm导入Python_python简单项目

    pycharm导入Python_python简单项目1安装Anaconda1、安装anocandahttps://www.jianshu.com/p/d3a5ec1d9a082、配置anocanda环境变量3、测试安装成功看到如下就安装成功了2python3.81、安装软件等待安装完成!2、添加python的环境变量3、测试成功3、pycharm导入python项目1、打开对应的项目2、将python3.8导入该项目中遇到如下问题:(如

    2022年8月28日
    4
  • route命令详解

    route命令详解route命令详解在网络中,route命令用来显示、添加、删除和修改网络的路由。1.route命令的格式route[-f][-p][Command][Destination][maskNetmask][Gateway][metricMetric][ifInterface]2.route-参数的含义:route-f:用于清除路由表。route-p:用于创建永久路由。routeComman:主要有print(打印路由)、ADD(添加路由)、DELETE(删

    2022年7月18日
    28
  • PyCharm代码自动补全设置

    PyCharm代码自动补全设置PyCharm 代码自动补全设置

    2025年8月6日
    4
  • list去重 distinct

    list去重 distinct总结下。1.使用java8新特性stream进行List去重publicstaticList<String>delRepeat(List<String>list){List<String>myList=listAll.stream().distinct().collect(Collectors.toList());returnmyList;}2.双重for循环去重(不推荐使用,速度太慢)实际是使用lis…

    2022年5月23日
    58
  • DELL服务器安装server2012

    DELL服务器安装server2012Dell 服务器安装 server2012R2 系统一 配置 RAID 0 或 5 安装系统一 配置 RAID 0 或 5 1 1 dell 服务器开机后 系统自检 加载到 PERC 卡自检页面的时候 按 Ctrl R 进入 PERCBIOS 管理页面 1 2 进入后我们可以看到已经创建好的两个 RAID 阵列 RAID1 DiskID 0 1 RAID10 Diskid 2 3 4 5 2 1 后续我们需要清除已经创建好的两个 RAID 阵列 为重新初始化配置所有的硬盘做准备方向键控制 高亮选中 PERC 卡阵 Ctrl R

    2026年3月19日
    2
  • Focal Loss与GHM 理解与使用

    Focal Loss与GHM 理解与使用一 理解 5 分钟理解 FocalLoss 与 GHM 解决样本不平衡利器 https zhuanlan zhihu com p 二 使用 GHM 论文理解及实现 https zheng yuwei github io 2019 07 08 13 GHM E8 AE BA E6 96 87 E7 90 86 E8 A7 A3 E5 8F 8A E5 AE 9E E7 8E B0 ghm kerashttps github com wangbingnan1 ghm ke

    2026年3月16日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号