Java EE初阶启程记04---线程的状态 - 实践

news/2025/9/30 11:51:15/文章来源:https://www.cnblogs.com/wzzkaifa/p/19120653

 个人主页:寻星探路

作者简介:Java研发方向学习者

个人专栏:、《

⭐️人生格言:没有人生来就会编程,但我生来倔强!!!



目录

1、观察线程的所有状态

2、线程状态和状态转移的意义

3、观察线程的状态和转移


1、观察线程的所有状态

线程的状态是⼀个枚举类型Thread.State

 public class ThreadState {public static void main(String[] args) {for (Thread.State state : Thread.State.values()) {System.out.println(state);}}}

        NEW:安排了工作,还未开始行动(创建了thread对象,但是还没start)

        RUNNABLE:可工作的,又可以分成正在工作中和即将开始工作

        BLOCKED:这几个都表示排队等着其他事情(特指由于锁引起的阻塞)

        WAITING:这几个都表示排队等着其他事情(死等进入阻塞状态,join)

        TIMED_WAITING:这几个都表示排队等着其他事情(带有超时时间的阻塞等待)

        TERMINATED:工作完成了(操作系统内部的线程已经销毁了,但是 Thread 对象还在,线程的入口方法执行完毕)

2、线程状态和状态转移的意义

        大家不要被这个状态转移图吓到,我们重点是要理解状态的意义以及各个状态的具体意思。

还是我们之前的例⼦:

        刚把李四、王五找来,还是给他们在安排任务,没让他们行动起来,就是NEW状态;

        当李四、王五开始去窗口排队,等待服务,就进入到 RUNNABLE 状态。该状态并不表示已经被银行工作人员开始接待,排在队伍中也是属于该状态,即可被服务的状态,是否开始服务,则看调度器的调度;

        当李四、王五因为一些事情需要去忙,例如需要填写信息、回家取证件、发呆一会等等时,进入BLOCKED 、 WATING 、 TIMED_WAITING 状态,至于这些状态的细分,我们以后再详解; 如果李四、王五已经忙完,为 TERMINATED 状态。

所以,之前我们学过的isAlive()方法,可以认为是处于不是NEW和TERMINATED的状态都是活着的。

3、观察线程的状态和转移

观察1:关注 NEW 、 RUNNABLE 、TERMINATED 状态的转换

public class ThreadStateTransfer {public static void main(String[] args) throws InterruptedException {Thread t = new Thread(() -> {for (int i = 0; i < 1000_0000; i++) {}}, "李四");System.out.println(t.getName() + ": " + t.getState());;t.start();while (t.isAlive()) {System.out.println(t.getName() + ": " + t.getState());;}System.out.println(t.getName() + ": " + t.getState());;}
}

观察2:关注 WAITING 、 BLOCKED 、 TIMED_WAITING 状态的转换

public static void main(String[] args) {final Object object = new Object();Thread t1 = new Thread(new Runnable() {@Overridepublic void run() {synchronized (object) {while (true) {try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}}}, "t1");t1.start();Thread t2 = new Thread(new Runnable() {@Overridepublic void run() {synchronized (object) {System.out.println("hehe");}}}, "t2");t2.start();}

        使用jconsole可以看到t1的状态是TIMED_WAITING,t2的状态是BLOCKED

        修改上面的代码,把t1中的sleep换成wait

public static void main(String[] args) {final Object object = new Object();Thread t1 = new Thread(new Runnable() {@Overridepublic void run() {synchronized (object) {try {// [修改这⾥就可以了!!!!!]// Thread.sleep(1000);object.wait();} catch (InterruptedException e) {e.printStackTrace();}}}}, "t1");...
}

        使用jconsole可以看到t1的状态是WAITING

结论:

        BLOCKED表示等待获取锁,WAITING和TIMED_WAITING表示等待其他线程发来通知

        TIMED_WAITING线程在等待唤醒,但设置了时限;WAITING线程在无限等待唤醒

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

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

相关文章

外贸先做网站还是开公司网站备案信息注销

电脑是一部百科全书&#xff0c;有它相伴能滋润人生、丰富人生&#xff0c;能使人和世界零距离接触。以下是小编给大家提供的关于学电脑作文&#xff0c;欢迎大家阅读参考!学电脑作文1我这个人哪&#xff0c;什么都想试一试&#xff0c;什么都想学一学。看到妈妈用缝纫机做衣服…

US$44 YH Remote Key Tester Frequency/Infrared IR

YH Remote Key Tester Frequency/Infrared IRIt can work alone and work together with Yanhua Mini ACDP, both ok.YH Remote Key Tester Frequency/Infrared IR can detect frequency of car remote control as wel…

【星海出品】RabbitMQ 死信 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

【研发规范】Git 提交(commit)、CodeReview规范

本文将分为三个部分:为什么需要提交规范? 提交规范详解(核心内容) 与 Code Review 流程的结合1. 为什么需要提交规范? 在 Code Review 前,如果提交的代码杂乱无章,审查者会非常痛苦:理解成本高:审查者需要花费…

PCIE 各个管脚的作用是什么?

REQ-CLK PCIe REQ-CLK GPIO(Request Clock GPIO) 是在某些 SoC 或平台上用于 控制 PCIe 参考时钟(REFCLK)请求/使能 的信号,通常与 CLKREQ#(Clock Request) 功能相关。它的作用主要体现在 低功耗管理 和 链路唤…

移动端网站没有icpwin2008做的网站打不开

1.Normalizer&#xff08;归一化&#xff09;&#xff08;更加推荐使用&#xff09; 优点&#xff1a;将每个样本向量的欧几里德长度缩放为1&#xff0c;适用于计算样本之间的相似性。 缺点&#xff1a;只对每个样本的特征进行缩放&#xff0c;不保留原始数据的分布形状。 公式…

Windows 11 局域网打印机共享设置

🎈遵照本教程设置完成后,可实现电脑无密码共享本地打印机。点击图片可放大! I. 同一网络和工作组 为使打印机共享成功,需确保要访问的计算机都在“同一网络”和“同一工作组”。找到 Windows 徽标,打开[设置],在…

DailyPaper-2025-9-29

失踪人口回归,才识浅薄啥也不懂勿喷LongLive: Real-time Interactive Long Video Generation https://arxiv.org/abs/2509.22622LongLive is a frame-level autoregressive framework for real-time and interactive …

MySQL版本选择

MySQL版本选择我们使用的MySQL8.0+和5.7+都是LTS版本,8.4+也已成为最新的一个LTS版本。 MySQL 8.4.x 延续了 8.0 系列的性能优化和安全性改进,包括JSON 表支持、窗口函数等新特性,同时修复了此前版本的安全漏洞和兼…

gpd winmax2 fedora42 睡眠秒唤醒问题

最近入了gpd win max2 2025 8840u款学习机(bushi),到手就刷了fedora 42 和野蛮学习系统(bushi),fedora42下遇到睡眠秒唤醒的问题。这个问题在我之前的8845hs处理器的笔记本上面也有,但情况跟gpd这个还不一样,接…

国企人力资源管理系统怎么选?内行人推荐这8款,功能、服务双保障

摘要:新一轮国企改革对HR管理提更高要求,传统系统难满足合规、干部管理、信创等需求。本文测评红海云、用友等8款主流国企人力资源管理系统,分析优劣,还给出选型避坑与落地建议,助力国企HR数字化转型。本文属于深…

无锡网站建设网百度广告联盟看广告赚钱

第 一 部分 高级篇 第 1 章 Explain 查看执行计划 在 clickhouse 20.6 版本之前要查看 SQL 语句的执行计划需要设置日志级别为 trace 才能可以看到&#xff0c;并且只能真正执行 sql&#xff0c;在执行日志里面查看。在 20.6 版本引入了原生的执行计划的语法。在 20.6.3 版本成…

巩义网站建设联系电话泉州专业网站设计技术公司

有时候想要对比跨度几十个commits之前的代码区别&#xff0c;想直接使用github的用户界面。可以直接在官网操作。 示例 首先要创建一个旧commit的branch。进入该旧的commit&#xff0c;然后输入branch名字即可。 然后在项目网址后面加上compare即可对比旧的branch和新的bran…

linux查询磁盘空间,查询指定目录的空间 df命令

linux查询磁盘空间,查询指定目录的空间 df命令linux查询磁盘空间,查询指定目录的空间 命令格式: df -h:以人类可读格式(GB/MB/KB)显示空间信息 jenkins启动失败,可能是磁盘空间不足,查询指定目录的空间验证磁盘空…

东莞网站推广模式音乐推广公司

AI是一门入门简单&#xff0c;但想深入却很难的学科&#xff0c;这也是为什么AI高端人才一直非常紧缺的重要原因。在AI领域技术领域&#xff0c;我们可以说机器学习功底决定了一个人的上限也不为过。为什么&#xff1f;机器学习就像物理学中的数学&#xff0c;如果你对数学没有…

轻松规划房贷:用好公积金贷款,让梦想之家触手可及

在现代生活中,买房是许多人追求的重要目标之一。公积金贷款因其利率较低、政策支持而备受青睐,但如何准确计算月供、利息和还款周期,却让不少人感到头疼。今天,我们来聊聊如何高效规划公积金贷款,并分享一个实用工…

做彩票网站要多大服务器高密哪里做网站

首先&#xff0c;我们先弄明白拼多多场景推广的展示以及扣费规则&#xff1a;排名规则&#xff1a;综合排名商品质量分广告出价。商品质量分点击率转化率销量交易额。扣费规则&#xff1a;扣费&#xff08;下一位的出价*下一位的商品素材点击率&#xff09;/自己的商品素材点击…

唐河网站建设wordpress官方模板下载

文章目录 一些开发中遇到的SQL问题1. sql报11090错误,原因可能是以下错误&#xff0c;在&#xff1f;占位符后有一个空格2. 占位符&#xff1f;的位置不能是表名&#xff0c;否则会无法进行预编译3. mysql中desc是关键字&#xff0c;如果字段名称为desc会报错4. 数据库中时间格…

milvus使用的etcd空间整理

环境说明: docker compose部署的ETCD1.查看etcd容器情况[root@localhost milvus]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS …

设计素材网站图案免费低价建设网站

【.NET Core】Linq查询运算符&#xff08;二&#xff09; 文章目录 【.NET Core】Linq查询运算符&#xff08;二&#xff09;一、概述二、生成运算2.1 DefaultIfEmpty2.2 Empty2.3 Range2.4 Repeat 三、相等运算3.1 SequenceEqual 四、元素运算4.1 ElementAt4.2 ElementAtOrDef…