Java多线程~线程的状态以及状态转移的条件

news/2024/5/5 20:58:08/文章来源:https://blog.csdn.net/qq_58284486/article/details/126981782

目录

线程的六种状态

状态转移的条件

NEW

RUNNABLE

BLOCKED

WAITING

TIMED_WAITING

TERMINATED


线程的六种状态

线程共有六种状态,分别为:

· NEW(初始状态):new表示新建一个线程对象,即安排了工作,但未开始行动

· RUNNABLE(可运行态):表示一个线程在等待被调度或者正在运行中,可以说成是正在工作中和即将开始工作

· BLOCKED(阻塞状态):表示一个线程阻塞在进入synchronized修饰的方法或代码块时的状态,即排队等着其他事情

· WAITING(等待状态):表示一个线程需要等待其他线程做出一些特殊的动作(中断或者通知),其作用是让出CPU,等待被显示的唤醒,被唤醒后进入BLOCKED状态,再重新获取锁

· TIMED_WAITING(超时等待):与WAITING一样,但不同的是超时等待,在一定时间内让出CPU,时间到了后自动唤醒,进入BLOCKED状态,再重新获取锁,WAITING是无限期等待

· TERMINATED(终止状态):表示线程已经执行完毕,退出的线程处于该状态

状态转移的条件

NEW

新建立的线程在没有调用start方法之前处于这个状态

public class Test {public static void main(String[] args) {Thread t = new Thread(new Runnable() {@Overridepublic void run() {while(true) {}}},"t线程");}
}

例如上述代码,创建了线程t,但是未调用start方法,此时线程t就处于NEW初始状态

RUNNABLE

在NEW状态的线程调用start方法之后,转换为RUNNABLE状态,另外正在CPU上运行/即将准备运行的线程也处于RUNNABLE状态

public class Test {public static void main(String[] args) {Thread t = new Thread(new Runnable() {@Overridepublic void run() {while(true) {}}},"t线程");t.start();}
}

上述t线程调用了start方法后,即进入了运行状态,可以通过jconsole进行观察

  

BLOCKED

当前线程在申请synchronized锁时,如果该锁此时正在被其他线程占用,就会进入阻塞状态

public class Test {public static void main(String[] args) throws InterruptedException {Object lock = new Object();Thread t = new Thread(new Runnable() {@Overridepublic void run() {synchronized (lock) {while(true) {}}}},"t线程");t.start();Thread.sleep(100);Thread t1 = new Thread(new Runnable() {@Overridepublic void run() {synchronized (lock) {while(true) {}}}},"t1线程");t1.start();}
}

 上述代码创建了两个线程,t和t1,t线程先申请synchronized锁,申请成功后占有该锁,此时t1线程再进行申请时,此时锁被t线程占用,t1线程就会进入BLOCKED等待状态,通过jconsole观察如下

WAITING

调用wait方法后会进入等待状态

public class Test {public static void main(String[] args) {Object lock = new Object();Thread t = new Thread(new Runnable() {@Overridepublic void run() {try {synchronized (lock) {lock.wait();}} catch (InterruptedException e) {e.printStackTrace();}}},"t线程");Thread t1 = new Thread(new Runnable() {@Overridepublic void run() {synchronized (lock) {while (true) {}}}},"t1线程");t.start();t1.start();}
}

例如上述代码,启动t和t1线程后,当t线程申请到锁后就调用wait方法进入WAITING等待状态,等待被唤醒

 

TIMED_WAITING

调用sleep方法或wait(超时时间)后会进入该状态

public class Test {public static void main(String[] args) {Object lock = new Object();Thread t = new Thread(new Runnable() {@Overridepublic void run() {try {synchronized (lock) {while(true) {lock.wait(100);}}} catch (InterruptedException e) {e.printStackTrace();}}},"t线程");t.start();}
}

t线程启动后,一直循环调用wait方法,使线程t一直处于TIMED_WAITING超时等待状态,如果未使用while语句一直循环,则当休眠0.1s后,就自动被唤醒,进入BLOCKED状态,再重新申请获取锁 

 

 

TERMINATED

当一个线程执行完毕后,就处于该状态了

public class Test {public static void main(String[] args) throws InterruptedException {Thread t = new Thread(new Runnable() {@Overridepublic void run() {System.out.println("t线程此时的状态为: " + Thread.currentThread().getState());}});t.start();t.join();//main线程等待t线程执行完之后再执行System.out.println("t线程此时的状态为: " + t.getState());}
}

 

 

 

 

 

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

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

相关文章

Ubuntu指令说明

1、ls ls命令是list的缩写,用来打印出当前目录的清单。如果ls指定其他目录,那么就会显示指定目录里的文件及文件夹清单。通过ls命令不仅可以查看linux文件夹包含的文件,而且可以查看文件权限(包括目录、文件夹、文件权限&#xf…

【逻辑】【java基础】代码逻辑思路 层级关系 【层级注解】【架构逻辑】

命名规范: 层级逻辑关系图: 层级逻辑思路图:(代码架构逻辑)

(附源码)springboot高校宿舍交电费系统 毕业设计 031552

Springboot高校宿舍交电费系统 摘 要 科技进步的飞速发展引起人们日常生活的巨大变化,电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流,人类发展的历史正进入一个新时代。在现实运…

低通滤波,高通滤波,中值滤波

低通滤波和高通滤波 【参考:图像处理之高通滤波及低通滤波】 低通滤波和高通滤波需用到傅里叶变换知识,可参考这里。 图像在频域里面,频率低的地方说明它是比较平滑的,因为平滑的地方灰度值变化比较小,而频率高的地方通常是边缘或者噪声,因为这些地方往往是灰度值突变的。…

用户终身价值利用xgboost进行LTV预测

在对用户进行细分的时候需要衡量用户的一个重要指标就是用户生命周期价值。不管是什么投入最终的目的是为了盈利,当然如何识别正确的用户周期价值就至关重要了。 其中用户的终身价值计算就非常容易。可以通过一个时间窗口期,即具体的时间可以是年,可以是月,也可以是日计算…

数字藏品app开发

目前大平台的数字藏品主要功能分为三个大体的方向: 1.建立独立的电商平台,平台方组织发行并销售或者赠送,这种玩的方式是国内的主流运行方向; 2.用户将持有的数字藏品引入到了社交平台,国外平台允许用户验证所…

React教程之每个开发人员都应该使用的可扩展和可维护的 React 项目结构

一个好的项目结构可以对项目在理解代码库、灵活性和维护方面的成功程度产生巨大影响。没有良好结构和维护的项目很快就会变成一团糟和可怕的遗产,没有人愿意与之合作。 现在,我将向您展示我在项目中经常使用的结构,并解释其背后的原因。这种结构应该是大型应用程序的一个很…

endpoint is blank

报错图 问题:简单来说使用nacos作为注册中心的时候 并没有对注册中心进行配置而出现的报错 nacos注册中心采用bootstrap.yml或者bootstrap.properties文件进行配置,所以有的人在application.yml或application.properties进行配置了 还是会报同样的错误 nacos正确的配置应该使…

使用RestfulTool插件模拟前端向后端发送请求体,通过SpringMVC结合MyBaits响应返回体

✨✨博主简介:一个会bbox的👨‍💻 ✨✨个人主页:沫洺的主页 📚📚系列专栏: 📖 JavaWeb专栏📖 JavaSE专栏 📖 Java基础专栏📖vue3专栏 💖💖如果文章对你有所帮…

Nacos2.0.3 单例模式mysql配置启动,完整版

一、copy配置文件application.properties 从运行的容器中把application.properties文件copy到虚拟机指定目录:/opt/nacos/conf/ docker cp nacos:/home/nacos/conf/application.properties /opt/nacos/conf/application.properties二、修改配置文件 application.…

外汇天眼:美联储如预期再次加息75个基点 并誓言进一步加息以对抗通胀

当地时间周三下午,美联储(Federal Reserve)将基准利率再上调75个基点,并暗示将继续在远高于当前水平的水平上加息。为了降低接近上世纪80年代初以来最高水平的通货膨胀率,美联储将联邦基金利率上调至3%-3.25%的区间,为2008年初以来…

计算机专业毕业设计怎么选?计算机本科毕业设计选题 2023年选题推荐

计算机专业毕业设计怎么选?计算机本科毕业设计选题 2023年选题推荐前言 现在已经迎来2023年的毕业季,很多同学咨询“IT跃迁谷毕设展”关于计算机毕业设计选题方面的问题。例如计算机毕设选题什么好?计算机毕设选题选什么新颖一些?计算机毕设选题如何好过关一些?等等一些问…

Fabric.js 喷雾笔刷 从入门到放肆

theme: smartblue 我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第18篇文章,点击查看活动详情 本文简介 点赞 关注 收藏 学会了 喷雾笔刷 SprayBrush 是 fabric.js 提供的一个很好玩的工具,而且 fabric.js 也封装好了很多非常方便的…

ASP.NET 错误机制

部分包括设置为 On 的 mode 属性。mode 属性用于控制错误重定向发生的方式。例如,如果您正开发应用程序,则很可能希望查看实际的 ASP.NET 错误信息,并且不希望被重定向到更用户友好的错误页。mode 属性包括以下设置: On&#xff1…

【C语言】规范掌握C语言函数|数组名的妙用|指针快速入门|综合使用小案例

✅作者简介:热爱后端语言的大学生,CSDN内容合伙人 ✨精品专栏:C面向对象 文章目录1、函数的结构1.1、无参无返1.2、无参有返1.3、有参无返1.4、有参有返1.5、主函数中的调用及运行效果2、C语言数组创建和基本操作2.1、数组创建的方式2.2、数组…

CVE-2017-0143(永恒之蓝)漏洞复现By metasploit

一、永恒之蓝介绍 永恒之蓝是在Windows的SMB服务处理SMB v1请求时发生的漏洞,这个漏洞导致攻击者在目标系统上可以执行任意代码。通过永恒之蓝漏洞会扫描开放445文件共享端口的Windows机器,无需用户任何操作,只要开机上网,不法分子就能在电脑和服务器中植入勒索软件、远程控…

笔记-设备相关知识

目录 设备类 接口类 Windows 如何安装设备 步骤 1:标识设备 步骤 2:选择设备的驱动程序包 搜索驱动程序包 选择驱动程序 步骤 3:已安装设备的驱动程序包 硬件 为设备创建硬件 ID 根枚举设备的硬件 ID 获取设备的硬件 ID 列表 硬件…

低浓度阿拉特津(ATZ)诱导MCF-7细胞增殖的生物标志物发现及其代谢组学机制探究

低浓度阿拉特津(ATZ)诱导MCF-7细胞增殖的生物标志物发现及其代谢组学机制探究 文章标题:Integrated metabolomics and transcriptomics analysis reveals new biomarkers and mechanistic insights on atrazine exposures in MCF7 cells 发…

【转】详谈判断点在多边形内的七种方法

原帖地址: https://blog.csdn.net/WilliamSun0122/article/details/77994526 射线法时间复杂度:O(n) 适用范围:任意多边形算法思想:以被测点Q为端点,向任意方向作射线(一般水平向右作射线),统计该射线与多边形的交点数。如果为奇数,Q在多边形内;如果为偶数,Q在多边…

用工具刺探主机通信和用系统ping命令有何区别(新人常犯的错误)

ping是操作系统自带的命令,经常用来刺探对端主机是否在线,通信能否畅通。它的原理是在调用ping命令时驱动TCP/IP协议栈的ICMP模块发送icmp echo request消息,待对方主机的ICMP模块收到后,会自动回复icmp echo response消息。本方收到icmp echo response即可确认对方主机在线…