【多线程】Java线程的几种状态详解

news2024/10/5 18:24:27

线程的状态

  • 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: 安排了⼯作, 还未开始⾏动
  • RUNNABLE: 可⼯作的. ⼜可以分成正在⼯作中和即将开始⼯作.
  • BLOCKED: 这⼏个都表⽰排队等着其他事情
  • WAITING: 这⼏个都表⽰排队等着其他事情
  • TIMED_WAITING: 这⼏个都表⽰排队等着其他事情
  • TERMINATED: ⼯作完成了.

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 class ThreadDemo {
    public static void main(String[] args) {
        final Object object = new Object();
        Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (object) {
                    while (true) {
                        try {
                            Thread.sleep(1000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        }, "t1");
        t1.start();
        Thread t2 = new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (object) {
                    System.out.println("hehe");
                }
            }
        }, "t2");
        t2.start();
    }
}

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

jconsole程序位于你的JDK文件夹的bin目录里

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

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

    }

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

jconsole程序位于你的JDK文件夹的bin目录里

结论:
• BLOCKED 表⽰等待获取锁, WAITING 和 TIMED_WAITING 表⽰等待其他线程发来通知.
• TIMED_WAITING 线程在等待唤醒,但设置了时限; WAITING 线程在⽆限等待唤醒

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

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

相关文章

利用故事推动企业变革:如何提升数据分析技能

单一的数据和表格尽管有算法的支撑&#xff0c;但在其表达方式上总会让人感到头疼。当我们需要深入了解企业的盈利能力&#xff0c;或是尝试评估业务的增长机会时&#xff0c;以往都会将精力全部放在分析数字、阅读信息、回顾历史和沟通交流之上&#xff0c;却忽略随之而生成的…

【中创:抢抓机遇,乘势而上】AI引爆算力需求,算力市场或将持续供不应求

2030年人类将迎来YB数据时代&#xff0c;全球算力总规模达到56ZFlops&#xff0c;其中智能算力达到52.5ZFlops&#xff0c;在算力需求中占绝对主导地位。 AI大模型迭代速度越来越快&#xff0c;各大厂商对智能算力投入大幅增加&#xff0c;支持存储和训练的高端AI服务器的需求…

基于Java+SpringBoot的旅游路线规划系统(源码+论文)

文章目录 目录 文章目录 前言 一、功能设计 二、功能实现 1.1 前端首页模块的实现 1.2 景点新闻 1.3 景点在线预订 1.4 酒店在线预订 1.5 管理员景点管理 1.6 管理员旅游线路管理 1.7 酒店信息管理 三、库表设计 前言 随着我国的经济的不断发展&#xff0c;现在的一些热门的景…

雷卯推荐多种8KW以上TVS二极管

一、 应用 TVS 二极管应用广泛&#xff0c;如消费电子产品、汽车工业、弹药、电信、航空航天工业和智能控制系统。 二、雷卯推荐系列产品列表&#xff1a; 以上仅是部分产品推荐&#xff0c;更多产品请联系leiditech 三、 封装尺寸数据 四、雷卯国产化替代表 部分展示 上海…

深究 DevOps 与平台工程的区别

今天&#xff0c;我们将讨论平台工程和 DevOps 的关系。尽管这两个概念有一些共同点&#xff0c;但它们仍然是截然不同的&#xff0c;我们将具体了解它们之间的区别。本文旨在解释当代软件工程中的这两个基本概念。通过实际案例&#xff0c;我们将分别说明这两个方法如何塑造了…

svn tortoiseSVN没有显示更新后的log

同事更新了svn提交 自己打开文件发现文件没有更新&#xff0c;而且log显示也没用更新 需要勾选log界面下的这个 显示同事提交合并的修改

自学python?一般人我还是劝你算了吧!

自我介绍 本人其实属于一枚屌丝&#xff0c;在真正开始学python之前&#xff0c;其实也就是对电脑的认知只限于上个网&#xff0c;玩个office办公软件。废话不多说&#xff0c;我为啥说自学python&#xff0c;一般人我还是劝你算了吧。因为我就是那个不一般的人。 基础真的很…

JavaScript中手动实现Array.prototype.map方法

在前端开发中&#xff0c;我们经常需要对数组进行操作和处理。在JavaScript中&#xff0c;数组是常用的数据类型之一。而数组的map方法可以将一个数组中的每个元素都进行某种操作&#xff0c;并返回一个新的数组。今天&#xff0c;我们就来手动实现JavaScript中数组原型的map方…

3dmax渲染图片不清晰和是结果是灰图怎么回事?图片颜色位数介绍

3ds Max这类三维建模和渲染软件中在选择和设置渲染结果的输出格式时有时候需要设置的一个选项是“图像控制”。 如果图片格式设置的颜色位数不对&#xff0c;那么结果也会不清晰和灰色哦&#xff01; 比如选择TIF格式时 就需要设置存图位数。 那个这个选项该怎么选择设置呢&a…

【网络编程】okhttp源码解析

文章目录 配置清单框架结构解析 配置清单 首先了解一下okHttp的配置清单&#xff1a; Dispatcher dispatcher &#xff1a;调度器&#xff0c;⽤于调度后台发起的⽹络请求&#xff0c;有后台总请求数和单主机总请求数的控制。List<Protocol> protocols &#xff1a;⽀持…

springcloud-网关(gateway)

springcloud-网关(gateway) 概述 \Spring Cloud Gateway旨在提供一种简单而有效的方式来路由到API&#xff0c;并为其提供跨领域的关注&#xff0c;如&#xff1a;安全、监控/指标和容错 常用术语 Route&#xff08;路由&#xff09;: 网关的基本构件。它由一个ID、一个目的地…

计算机设计大赛 深度学习人体跌倒检测 -yolo 机器视觉 opencv python

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习的人体跌倒检测算法研究与实现 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满…

数据库管理-第152期 Oracle Vector DB AI-04(20240220)

数据库管理152期 2024-02-20 数据库管理-第152期 Oracle Vector DB & AI-04&#xff08;20240220&#xff09;1 常用的向量检索方法聚类图搜索哈希量化 2 Oracle Vector DB中的索引索引&#xff08;默认&#xff09; 索引&#xff08;高级&#xff09;3 EMBEDDINGSSQL EMBE…

单片机stm32智能鱼缸

随着我国经济的快速发展而给人们带来了富足的生活&#xff0c;也有越来越多的人们开始养鱼&#xff0c;通过养各种鱼类来美化居住环境和缓解压力。但是在鱼类饲养过程中&#xff0c;常常由于鱼类对水质、水位及光照强度有着很高的要求&#xff0c;而人们也由于工作的方面而无法…

计算机组成原理(6)-----指令执行过程

目录 1.指令周期的概念 2.指令周期的数据流 &#xff08;1&#xff09;取指周期 &#xff08;2&#xff09;间址周期 &#xff08;3&#xff09;执行周期 &#xff08;4&#xff09;中断周期 3.指令执行方案 &#xff08;1&#xff09;单指令周期 &#xff08;2&#…

力扣 309. 买卖股票的最佳时机含冷冻期

题目来源&#xff1a;https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-with-cooldown/description/ C题解&#xff1a;动态规划 状态1&#xff1a;表示持有股票。更新为之前持有股票&#xff08;dp[i-1][0]&#xff09;或者不持有股票且不处于冷冻期后买入&…

怎么去除图片水印?推荐两个一键去水印方法

在数字时代&#xff0c;图片已成为我们日常交流、学习和工作中的重要媒介。然而&#xff0c;很多时候&#xff0c;我们在网上找到心仪的图片时&#xff0c;却发现它们被加上了水印&#xff0c;影响了观赏和使用。此时我们就需要在保证版权的前提下&#xff0c;去除图片中的水印…

LDRA Testbed软件静态分析_软件质量度量

系列文章目录 LDRA Testbed软件静态分析_操作指南 LDRA Testbed软件静态分析_自动提取静态分析数据生成文档 LDRA Testbed软件静态分析_Jenkins持续集成_(1)自动进行静态分析的环境搭建 LDRA Testbed软件静态分析_Jenkins持续集成_(2)配置邮件自动发送静态分析结果 LDRA Testb…

华为配置直连三层组网直接转发示例

华为配置直连三层组网直接转发示例 组网图形 图1 配置直连三层组网直接转发示例组网图 业务需求组网需求数据规划配置思路配置注意事项操作步骤配置文件扩展阅读 业务需求 企业用户接入WLAN网络&#xff0c;以满足移动办公的最基本需求。且在覆盖区域内移动发生漫游时&#xff…

【力扣hot100】刷题笔记Day7

前言 身边同学已经陆陆续续回来啦&#xff0c;舍友都开始投简历了&#xff0c;我也要加油啦&#xff01;刷完hot100就投&#xff01; 73. 矩阵置零 - 力扣&#xff08;LeetCode&#xff09; 标记数组&#xff1a;空间复杂度O(mn) class Solution:def setZeroes(self, matrix:…