Java线程的6 种状态

news/2024/4/29 16:55:13/文章来源:https://blog.csdn.net/yuiezt/article/details/129116195

Java 线程的状态

Java线程有六种状态:
初始(NEW)、运行(RUNNABLE)、阻塞(BLOCKED)、
等待(WAITING)、超时等待(TIMED_WAITING)、终止(TERMINATED)。

  1. 初始状态(NEW)
    实现Runnable接口和继承Thread可以得到一个线程类,new一个实例出来,线程就进入了初始状态。

  2. 运行状态(RUNNABLE)

    • 就绪状态(RUNNABLE之READY)
      就绪状态只是说你资格运行,调度程序没有挑选到你,你就永远是就绪状态。
      调用线程的start()方法,此线程进入就绪状态。
      当前线程sleep()方法结束,其他线程join()结束,等待用户输入完毕,某个线程拿到对象锁,这些线程也将进入就绪状态。
      当前线程时间片用完了,调用当前线程的yield()方法,当前线程进入就绪状态。
      锁池里的线程拿到对象锁后,进入就绪状态。

    • 运行中状态(RUNNABLE之RUNNING)
      线程调度程序从可运行池中选择一个线程作为当前线程时线程所处的状态。这也是线程进入运行状态的唯一的一种方式。

  3. 阻塞状态(BLOCKED)
    阻塞状态是线程阻塞在进入synchronized关键字修饰的方法或代码块(获取锁)时的状态。

  4. 等待(WAITING)
    处于这种状态的线程不会被分配CPU执行时间,它们要等待被显式地唤醒,否则会处于无限期等待的状态。

  5. 超时等待(TIMED_WAITING)
    处于这种状态的线程不会被分配CPU执行时间,不过无须无限期等待被其他线程显示地唤醒,在达到一定时间后它们会自动唤醒。

  6. 终止状态(TERMINATED)

    • 当线程的run()方法完成时,或者主线程的main()方法完成时,我们就认为它终止了。这个线程对象也许是活的,但是它已经不是一个单独执行的线程。
    • 线程一旦终止了,就不能复生。
    • 在一个终止的线程上调用start()方法,会抛出java.lang.IllegalThreadStateException异常。

线程状态图:
在这里插入图片描述


对于几个阻塞状态的示例:

package demo;import jdk.nashorn.internal.ir.Block;import java.util.concurrent.TimeUnit;public class ThreadDemo {public static void main(String[] args) {//该线程在main方法开始执行后就通过sleep(100)进入到 Timed_waiting 状态new Thread(()->{while(true){try {TimeUnit.SECONDS.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}}},"thread_01").start();//该线程因为Synchronized,进入WAITING状态new Thread(()->{while(true){synchronized (ThreadDemo.class){try {ThreadDemo.class.wait();} catch (InterruptedException e) {e.printStackTrace();}}}},"thread_02").start();//进入timed_waiting状态new Thread(new BlockDemo(),"BlockDemo-01").start();//进入block状态new Thread(new BlockDemo(),"BlockDemo-02").start();}static class BlockDemo extends Thread{@Overridepublic void run() {synchronized (BlockDemo.class){while(true){try {TimeUnit.SECONDS.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}}}}}
}

我们通过jstack来查看他们的线程状态。
进入类目录,执行jps

D:\open_source\MyBatis\MyThread\target\classes\demo>jps
11776
20832 ThreadDemo
7856 Jps
21876 Launcher
27432 RemoteMavenServer36

执行 jstack 20832

D:\open_source\MyBatis\MyThread\target\classes\demo>jstack 20832
2023-02-20 00:30:44
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.351-b10 mixed mode):"DestroyJavaVM" #18 prio=5 os_prio=0 tid=0x0000029032cf9000 nid=0x6a68 waiting on condition [0x0000000000000000]java.lang.Thread.State: RUNNABLE"BlockDemo-02" #17 prio=5 os_prio=0 tid=0x000002904ff83800 nid=0x6f30 waiting for monitor entry [0x000000c5215ff000]java.lang.Thread.State: BLOCKED (on object monitor)at demo.ThreadDemo$BlockDemo.run(ThreadDemo.java:41)- waiting to lock <0x000000076c8bca88> (a java.lang.Class for demo.ThreadDemo$BlockDemo)at java.lang.Thread.run(Thread.java:750)"BlockDemo-01" #15 prio=5 os_prio=0 tid=0x000002904ff78800 nid=0x18f0 waiting on condition [0x000000c5214fe000]java.lang.Thread.State: TIMED_WAITING (sleeping)at java.lang.Thread.sleep(Native Method)at java.lang.Thread.sleep(Thread.java:342)at java.util.concurrent.TimeUnit.sleep(TimeUnit.java:386)at demo.ThreadDemo$BlockDemo.run(ThreadDemo.java:41)- locked <0x000000076c8bca88> (a java.lang.Class for demo.ThreadDemo$BlockDemo)at java.lang.Thread.run(Thread.java:750)"thread_02" #13 prio=5 os_prio=0 tid=0x000002904ff78000 nid=0x4c28 in Object.wait() [0x000000c5213fe000]java.lang.Thread.State: WAITING (on object monitor)at java.lang.Object.wait(Native Method)- waiting on <0x000000076c59bdf0> (a java.lang.Class for demo.ThreadDemo)at java.lang.Object.wait(Object.java:502)at demo.ThreadDemo.lambda$main$1(ThreadDemo.java:23)- locked <0x000000076c59bdf0> (a java.lang.Class for demo.ThreadDemo)at demo.ThreadDemo$$Lambda$2/1078694789.run(Unknown Source)at java.lang.Thread.run(Thread.java:750)"thread_01" #12 prio=5 os_prio=0 tid=0x000002904ff75000 nid=0x1c90 waiting on condition [0x000000c5212ff000]java.lang.Thread.State: TIMED_WAITING (sleeping)at java.lang.Thread.sleep(Native Method)at java.lang.Thread.sleep(Thread.java:342)at java.util.concurrent.TimeUnit.sleep(TimeUnit.java:386)at demo.ThreadDemo.lambda$main$0(ThreadDemo.java:12)at demo.ThreadDemo$$Lambda$1/1324119927.run(Unknown Source)at java.lang.Thread.run(Thread.java:750)

各个线程的状态一目了然。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_260708.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue-router 的基本用法

vue-router 的基本用法 1.什么是 vue-router vue-router 是 vue.js 官方给出的路由解决方案。它只能结合 vue 项目进行使用&#xff0c;能够轻松的管理 SPA 项目中组件的切换。 vue-router 的官方文档地址&#xff1a;https://router.vuejs.org/zh/ 2.vue-router 安装和配置的…

MacBook IDEA 顶部菜单栏不显示问题

文章目录背景&#xff1a;当前显示方式一1. 快捷键&#xff1a;双击shift 搜索 idea.vmoptions3. 在idea.vmoptions文件末尾添加 -Dapple.laf.useScreenMenuBarfalse方式二1. 访达 > 应用程序 > idea 右键 显示包内容2. 进入到bin包位置的命令终端3. 编辑文件 vi idea.pr…

EasyExcel 低内存导出大数据量的Excel方案探索 50万行 50列 (附:实现代码)

文章目录1.前言2.准备工作3.导出测试3.1.单次查询、全量导出3.2. 多次查询&#xff0c;多个文件&#xff0c;单次写入3.3.多次查询&#xff0c;多个文件&#xff0c;多次写入3.4.多线程导出探索3.5.文件打包成ZIP3.6.响应给客户4.实现代码5.结语1.前言 最近接到一个需求&#…

多元化增长引擎业务占比超四成,联想开启混动模式?

一句话概括联想集团的业绩&#xff1a;预料之内的整体下滑&#xff0c;超出预期的第二曲线。 上周五&#xff08;2月17日&#xff09;&#xff0c;联想集团发布了2022到2023财年第三季度业绩。根据财报&#xff0c;联想集团实现营收152.67亿美元&#xff0c;同比下降24%&#…

【机器学习】决策树-Gini指数

1. CART树 分类回归树(CART,Classification And Regression Tree)算法是一种决策树分类方法。CART每一个节点上都采用二分法&#xff0c;采用一种二分递归分割的技术&#xff0c;CART生成的树必须是二叉树&#xff0c;也就是无论回归还是分类&#xff0c;无论特征离散还是连续&…

15-基础加强3-单元测试日志

文章目录1.单元测试1.1概述【理解】1.2特点【理解】1.3使用步骤【应用】1.4相关注解【应用】2.日志2.1概述【理解】2.2日志体系结构和Log4J【理解】2.3入门案例【应用】1.单元测试 1.1概述【理解】 JUnit是一个 Java 编程语言的单元测试工具。JUnit 是一个非常重要的测试工具…

Profinet转ModbusTCP网关连接昆仑通态触摸屏配置案例

本案例是模拟将Modbus TCP 设备数据接入到西门子PROFINET 网络中。 使用设备为西门子 S7-1500 型 PLC, Profinet转ModbusTCP网关。MODBUS 从站昆仑通态触摸屏。 配置方法&#xff1a; 打开博图&#xff0c;新建项目并添加站点。 添加1513PLC。 设置好IP并处于联网状态 导入Pr…

VTK学习笔记(四十)vtk提取单层数据

VTK学习笔记&#xff08;四十&#xff09;vtk提取单层数据1. VTK学习笔记&#xff08;四十&#xff09;vtk提取单层数据1.1 vtkImageReslice提取单层图像1.2 vtkExtractVOI提取单层图像1. VTK学习笔记&#xff08;四十&#xff09;vtk提取单层数据 VTK实现单层图片的提取方法有…

力扣mysql刷题记录

mysql刷题记录 刷题链接https://leetcode.cn/study-plan/sql/?progressjkih0qc mysql冲&#xff01;mysql刷题记录一. 1699. 两人之间的通话次数题解二、1251. 平均售价题解三. 1571. 仓库经理题解四.1445. 苹果和桔子解五.1193. 每月交易 I题解六.1633. 各赛事的用户注册率题…

Android Spider XX兔 Wechat Cookie 校验 注册案例(二)

声明 此次案例只为学习交流使用&#xff0c;抓包内容、敏感网址、数据接口均已做脱敏处理&#xff0c;切勿用于其他非法用途&#xff1b; 文章目录声明前言一、资源推荐二、任务说明三、App抓包分析四、还原JS加密1、Date类2、MD5类3、组合调用还原 api_token 参数4、execjs模…

Android 基础知识4-2.10 GridLayout(网格布局)详解

一、GridLayout&#xff08;网格布局&#xff09;概述 GridLayout 布局是 Android 4.0 以后引入的新布局&#xff0c;和 TableLayout(表格布局) 有点类似&#xff0c;不过它功能更多&#xff0c;也更加好用&#xff0c;最大的特点是放置的组件自动占据网格的整个区域,每个组件的…

《FPGA学习》->呼吸灯

&#x1f34e;与其担心未来&#xff0c;不如现在好好努力。在这条路上&#xff0c;只有奋斗才能给你安全感。你若努力&#xff0c;全世界都会为你让路。呼吸灯&#xff0c;简而言之就像人类呼吸一样&#xff0c;有节奏的让LED灯从&#xff1a;灭->微微亮->微亮->亮-&g…

K_A12_014 基于STM32等单片机驱动S12SD紫外线传感器模块 串口与OLED0.96双显示

K_A12_014 基于STM32等单片机驱动S12SD紫外线传感器模块 串口与OLED0.96双显示一、资源说明二、基本参数参数引脚说明三、驱动说明IIC地址/采集通道选择/时序对应程序:数据对比&#xff1a;四、部分代码说明1、接线引脚定义1.1、STC89C52RCS12SD紫外线传感器模块1.2、STM32F103…

Leetcode.2257 统计网格图中没有被保卫的格子数

题目链接 Leetcode.2257 统计网格图中没有被保卫的格子数 Rating &#xff1a; 1709 题目描述 给你两个整数 m和 n表示一个下标从 0开始的 m x n网格图。同时给你两个二维整数数组 guards和 walls&#xff0c;其中 guards[i] [rowi, coli]且 walls[j] [rowj, colj]&#xff…

Jmeter常用断言之BeanShell断言详解

BeanShell断言可以使用beanshell脚本来执行断言检查&#xff0c;可以用于更复杂的个性化需求&#xff0c;使用更灵活&#xff0c;功能更强大&#xff0c;但是要能够熟练使用beanshell脚本 在这里除了可以使用beanshell的内置变量外&#xff0c;主要通过 Failure 和 FailureMess…

Dart中的混入类mixin

介绍 Mixin 是一种在多重继承中复用某个类中代码的方法模式。 Mixin 是面向对象程序设计语言中的类&#xff0c;提供了方法的实现。其他类可以访问mixin类的方法、变量而不必成为其子类。 简单来说就是官方设计了一个种可以方便复用的类&#xff0c;不必去实现很多接口。 应…

C++011-C++循环+枚举

文章目录C011-C循环枚举枚举枚举思想枚举举例题目描述 统计因数题目描述 质数判定错误方法一&#xff1a;优化方法1&#xff1a; 用break实现优化优化方法2&#xff1a; sqrt(n)题目描述 水仙花数题目描述 7744问题实现方法1优化方法2题目描述 余数相同问题题目描述 特殊自然数…

视频投票和图文投票之间的差异投票链接制作平台微擎投票

“我的舞台我的梦”网络评选投票_线上小程序的投票方式_视频投票的功能_在线投票程序用户在使用微信投票的时候&#xff0c;需要功能齐全&#xff0c;又快捷方便的投票小程序。而“活动星投票”这款软件使用非常的方便&#xff0c;用户可以随时使用手机微信小程序获得线上投票服…

嵌入物理(PINN)还是基于物理(AD)?

文章目录1. 传统"反演问题"1.1 反演问题是什么1.2 常见反演问题1.3 传统反演问题的困境2. 深度学习优势3. AD inversion 例子3.1 ADsurf3.2 ADseismic关于PINN的内容大家可以直接google PINN (Physical-informed neural network),其主要的目的是用一个神经网络拟合物…

Docker--------Day1

1.简介 您要如何确保应用能够在这些环境中运行和通过质量检测&#xff1f;并且在部署过程中不出现令人头疼的版本、配置问题&#xff0c;也无需重新编写代码和进行故障修复&#xff1f; Docker之所以发展如此迅速&#xff0c;也是因为它对此给出了一个标准化的解决方案-----…