JAVA 线程的6种状态

线程状态(Thread.State)。线程处于下列状态的其中之一。
一个线程在一个时刻只能有一个状态。这些状态是虚拟机线程状态,不能反应任何操作系统的线程状态。
通过Thread.getState()方法可以获得一个线程的状态。

NEW

新建,一个线程还没开始执行的状态。
新创建的线程,还没有开始执行,也就是还没有调用strat()方法。

RUNNABLE

正在运行,一个线程在Java虚拟机中正在运行的状态。
正在运行的状态不等于CPU正在运行这个线程的代码,也可能正在等待操作系统的资源,比如cpu资源。
当cpu空闲下来时,将会选择一个处于 RUNNABLE 状态的线程执行。

BLOCKED

阻塞,线程阻塞表示正在等待获取监控锁时的状态。
此时线程正在等待获取监控锁,以进入一个同步代码块或同步方法,或是在调用了Object.wait() 方法后重新进入一个同步代码块或同步方法。

WAITING

等待,线程处于无限期的等待状态,直到另一个线程执行特定的操作才能摆脱此状态。
线程处于等待状态,是由于线程调用了一下方法之一。

  • 不带超时时间参数的 Object.wait()
  • 不带超时时间参数的 Thread.join()
  • LockSupport.park()

线程处于等待状态时,正在等待另一个线程执行特定操作。
例如:

  • 线程在一个对象上调用 Object.wait() 方法后,将会等待其他线程在同一个对象上调用 Object.notify() 或 Object.notifyAll() 方法。
  • 线程在调用了别的线程的 Thread.join() 方法后,将会等待指定线程结束。

TIMED_WAITING

限时等待,线程处于有限时间的等待状态,直到另一个线程执行特定的操作或到时间,将会脱离此状态。
线程处于限时等待状态,是由于线程调用了一下方法之一,并且指定一个正数等待时间。

  • Thread.sleep()
  • 带超时时间参数的 Object.wait()
  • 带超时时间参数的 Thread.join()
  • LockSupport.parkNanos
  • LockSupport.parkUntil

TERMINATED

终止,已经退出了的线程在此状态。
终止状态,表示线程已经执行完毕了。

环境 JDK: openjdk-17+35

Original: https://www.cnblogs.com/lyphy/p/16324583.html
Author: Lyphy
Title: JAVA 线程的6种状态

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/593087/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 07、SpringBoot 启动 创建应用上下文

    debug进入 createApplicationContext方法 protected ConfigurableApplicationContext createApplicat…

    Java 2023年6月13日
    070
  • PHP(基本语法)PHP中的Session-登录案例

    文件结构: config.php: php /**1、数据库服务器 */ define(‘DB_HOST’,’localhost’); /**2、数据库用户名 */ define(…

    Java 2023年5月30日
    075
  • 力扣刷题之路——数组的改变、移动

    参考刷题顺序: 力扣刷题顺序 涉及题目 453. 最小操作次数使数组元素相等 283.移动零 665. 非递减数列 最小操作次数使数组元素相等 自己的想法:这个题,想了很久怎么用数…

    Java 2023年6月5日
    062
  • @FeignClient常用属性

    @FeignClient(name = "gateway-test", value = "gateway-test", url = &quo…

    Java 2023年6月5日
    082
  • CentOS7系统配置国内yum源和epel源

    1.备份原文件 首先进入 /etc/yum.repos.d/目录下,新建一个repo_bak目录,用于保存系统中原来的repo文件 2.在CentOS中配置使用网易和阿里的开源镜像…

    Java 2023年6月13日
    080
  • 转发和重定向

    forward 是服务器内部的重定向,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,而客户端并不知道,因此在客户端浏览器的地址栏中不回显示转向后的地址,还是原来的…

    Java 2023年6月14日
    086
  • Could not autowire. No beans of ‘JavaMailSenderImpl’ type found

    在设置邮件任务的时候 引入@Authoried其中提示找不到这个bean 一开始我以为是邮件参数的问题 就到配置类中去修改参数 后发现无果 在测试类中测试邮件发送 功能依旧可以成功…

    Java 2023年6月6日
    064
  • 如何实现 System.out.println(“a”) 显示 b

    今天看到一篇文章不用反射,能否交换两个字符串的值. 心想字符串常量在常量池里面,是在就算用了反射也交换不了吧。转念一想,不对,字符串常量虽然本身在常量池里面,但是它依然是个对象,那…

    Java 2023年6月9日
    085
  • 漫谈gRPC:Google自研的rpc框架到底有什么神秘之处?

    ​原文链接:https://mp.weixin.qq.com/s/ah9gdutZueCxbqjrWVhiQg 本文概括性的介绍gRPC,包括gRPC的起源,核心特性,生态体系,以…

    Java 2023年6月8日
    083
  • SpringBoot 接上一篇

    相关方法的说明: th:each=”user, iterStat : ${userlist}”中的 ${userList} 是后台传过来的集合 user 定…

    Java 2023年6月13日
    066
  • springBoot项目不重新上传jar包,增量升级步骤

    1.把源jar包cp到一个空文件夹里,然后把该jar包解压 4.重新打包 5.把打好的jar包cp到启动目录,启动就ok Original: https://www.cnblogs…

    Java 2023年5月30日
    067
  • 隐私计算FATE-核心概念与单机部署

    一、说明 Fate 是一个工业级联邦学习框架,所谓联邦学习指的就是可以联合多方的数据,共同构建一个模型; 与传统数据使用方式相比,它不需要聚合各方数据搭建 数据仓库,联邦学习在联合…

    Java 2023年6月6日
    090
  • 23.线程锁的使用

    不合理的设定临界区域,会让线程的调用失去意义。 1.不应该频繁的使用锁 2.减小锁使用的区域,线程公共资源之外 的资源 尽量不要放到临界区。 示例二:(不用线程) 示例三:(使用线…

    Java 2023年5月29日
    0118
  • synchronized下的 i+=2 和 i++ i++执行结果居然不一样

    逛【博客园-博问】时发现了一段有意思的问题: 这段代码是这样的: import java.util.concurrent.ExecutorService; import java….

    Java 2023年6月8日
    076
  • Linux常用的命令

    1 常用的系统工作命令 man 命令用来查看man命令自身的帮助信息 MAN(1) Manual pager utils MAN(1) NAME man – an interfac…

    Java 2023年6月8日
    082
  • 服务导出(生产者)

    前言 本文基于Dubbo2.6.x版本,中文注释版源码已上传github:xiaoguyu/dubbo 在了解了Dubbo SPI后,我们来了解下Dubbo服务导出的过程。 Dub…

    Java 2023年6月16日
    076
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球