Java线程状态转换

从java层面,线程状态分为六种,分别是New、Blocked、Waiting、Timed_Waiting、Terminated和Runnable

在这里插入图片描述
New:初始状态,线程刚刚创建还未调用start方法,线程还没有和操作系统的线程关联起来

New->Runnable(箭头1):运行状态,调用了start方法,java线程和操作系统现场进行了关联

Runnable<–>waiting(箭头2)):t线程synchronized(obj)获取对象锁后

  1. 调用obj.wait()方法时,t现场从Runnable–>waiting
  2. 调用obj.notify(),obj.notifyAll(),t.interrupt()时
    • 竞争锁成功,t线程从waiting --> Runnable
    • 竞争锁失败:t线程从waiting --> Blocked

Runnable<–>waiting(箭头3):当线程调用t.join()方法,当前线程从Runnable转移到waiting状态(注意是当亲啊现场在t线程对象的管程上进行等待,它底层也是wait-notify机制)

Runnable<–>waiting(箭头4):当线程调用LockSupport.park()方法会让当前线程从Runnable–>waiting状态,调用unpark方法或调用了线程的interrupt(),会让目标线程从waiting–>runnbale

Runnable<–>Timed_waiting(箭头5):t线程用synchronized(obj)获取对象锁后,调用obj.wait(long n)方法,t线程从Runnable到timed_waiting状态。如果t线程等待时间超过n毫秒,或调用obj.notify(),obj.notifyAll(),t.interruptI()时,当竞争锁成功,t现场充timed_waiting状态回到Runnable,否则从timed_waiting状态转移到Blocked。

Runnable<–>Timed_waiting(箭头6):当线程调用t.join(long n)方法时,当前线程从Runnable转移到Timed_waiting状态(注意是当前线程在t线程对象的管程上的等待),当前线程等待时间超过n毫秒,或t线程运行结束,或调用了当前线程的interrupt()时,当前线程从Time_waiting状态转移到Runnable状态。

Runnable<–>Timed_waiting(箭头7):当前现场调用Thread.sleep(long n),当前线程从Runnable转移到Timed_waiting,当前线程等待时间超过n毫秒,当前线程从Timed_Waiting转移到Runnable状态。

Runnable<–>Timed_waiting(箭头8):当前线程调用LockSupport.parkNanos(Long nanos)或LockSupport.parkUntill(long mills)时,当亲啊线程从Runnable转移到Timed_waiting状态,当调用unpark方法或调用线程的interrupt方法时,或者是等待超时时,会让目标线程从timed_waiting状态转移到Runnable状态。

Runnable<–>BLOCKED(箭头9):t线程用synchronized(obj)获取了对象锁时如果竞争失败,从Runnable转换为Blocked状态。持obj锁线程的同步代码块执行完毕,会唤醒该对象上的所有Blocked的线程重新竞争,如果t1线程竞争成功,从Blocked转换为Runnable状态,其它失败的线程仍然Blocked

**Runnable–> Terminated:**当前线程所有代码运行完毕,进入Terminated状态

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

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

相关文章

Android 11添加所有特许权限白名单

环境 Android 11 SDK 需求 修改了一些内置的系统APP&#xff0c;添加了些权限后&#xff0c;会有可能导致烧录固件后一起重启问题&#xff0c;打logcat会有类似下面的错误打印&#xff1a; 023-11-08 11:36:23.854 4173-4173/system_process E/AndroidRuntime: *** FATAL EX…

截图贴图软件推荐 - 附下载链接 | Snipaste | Steuna

截图贴图软件推荐 - 附下载链接 | Snipaste | Steuna 前言下载链接Snipaste&#xff08;推荐&#xff09;Steuna 前言 Win系统下截图软件多种多样&#xff0c;但贴图软件少之又少&#xff0c;本文介绍2个带有贴图功能的截图软件&#xff0c;分别是Snipaste和Steuna。可将截图固…

MySQL 批量修改表的列名为小写

1、获取脚本 SELECT concat( alter table , TABLE_NAME, change column , COLUMN_NAME, , lower( COLUMN_NAME ), , COLUMN_TYPE, comment \, COLUMN_COMMENT, \; ) AS 脚本 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA 数据库名 and TABLE_NAME表名-- 大写是up…

ArcGIS小技巧|四种计算图斑面积的方法

ArcGIS中有多种方法可计算出图斑面积&#xff0c;本文总结了四种方法&#xff0c;是否可堪称史上最全&#xff1f; 1、计算几何 这是最适合非专业人士的方法&#xff0c;直接利用ArcGIS中的计算几何功能进行计算。 a、首先添加一double类型字段&#xff0c;用来存储面积数值。…

中文编程软件视频推荐,自学编程电脑推荐,中文编程开发语言工具下载

中文编程软件视频推荐&#xff0c;自学编程电脑推荐&#xff0c;中文编程开发语言工具下载 给大家分享一款中文编程工具&#xff0c;零基础轻松学编程&#xff0c;不需英语基础&#xff0c;编程工具可下载。 这款工具不但可以连接部分硬件&#xff0c;而且可以开发大型的软件…

MongoDB 安装与配置

MongoDB 安装与配置 MongoDB 是一个高性能、开源的 NoSQL 数据库&#xff0c;它提供了丰富的查询功能和高可用性。本文将详细讲解 MongoDB 的安装与配置过程。 1. MongoDB 安装 1.1 Windows 平台安装 下载 MongoDB 安装包 访问 MongoDB 官方下载页面&#xff08;https://w…

QtC++与QPushButton详解

介绍 QPushButton 是 Qt 中的按钮控件&#xff0c;通常用于用户界面&#xff0c;允许用户与应用程序进行交互。以下是对 QPushButton 在 Qt 中的详细解释和作用&#xff1a; 触发事件&#xff1a; QPushButton 是用户界面中最常用的按钮&#xff0c;用户可以点击它来触发特定事…

常用设计模式——策略模式

策略模式是什么 策略模式&#xff08;Strategy&#xff09;&#xff1a;针对一组算法&#xff0c;将每一个算法封装起来&#xff0c;从而使得它们可以相互替换。 比如我们一个软件的会员等级&#xff0c;每一个等级都会有对应的一些等级权益&#xff0c;那么每一个等级权益就…

Maven中的继承与聚合

一&#xff0c;继承 前面我们将项目拆分成各个小模块&#xff0c;但是每个小模块中有很多相同的依赖于是我们创建一个父工程将模块中相同的依赖定义在父工程中&#xff0c;然后子工程继承父工程Maven作用&#xff1a;简化依赖配置&#xff0c;统一依赖管理,可以实现多重继承像J…

MySQL的存储过程

存储过程&#xff1a;是一组为了完成特定功能的sql语句的集合&#xff0c;类似于函数 写好一个存储过程之后&#xff0c;我们可以像函数一样随时可以调用sql的集合 复杂的&#xff0c;需要很多sql语句联合执行完成的任务 存储过程在执行上比sql语句执行速度快&#xff0c;效率…

财报解读:抢滩“睡眠经济”,麒盛科技如何制胜市场?

现代市场经济理论的鼻祖亚当斯密曾说&#xff0c;有需求就有市场&#xff0c;有市场才有发展。 调查研究显示&#xff0c;我国超3亿人存在睡眠障碍&#xff0c;其中超3/4的人晚11点以后入睡&#xff0c;近1/3的人熬到凌晨1点以后才能入睡。针对“睡个好觉”需求的“睡眠经济”…

动态内存管理(上)

目录 为什么要有动态内存分配malloc和freemallocfree calloc和realloccallocrealloc 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 &#x1f412;&#x1f412;&#x1f412; 个人主页 &#x1f978;&#x1f978;&#x1f978; C语言 &#x1f43f;️&…

有关python库

官方库 #1、导入某模块 import os #2、导入OS模块中的system方法 from os import system #3、导入某模块中的孙子模块中的xx方法&#xff0c;并重命名 from module.xx.xx import xx as rename #4、导入OS中的所有模块 #不用进行OS.method(),直接method&#xff08;&#xff0…

RRC configured BWP

TS 38.822有UE BWP 相关能力 IE的详细介绍,如下图。 举例说明,对于UE上报bwp-SameNumerology=upto2时,根据上图中的描述,UE支持能力情况如下:每个carrier最多支持2 个UE specific RRC configured DL/UL BWPs;可以通过DCI和BWP-InactivityTimer主动切换BWP;每个carrier的…

Linux安装Python3.10与部署flask项目实战详细记录

java开发新手入门Python,创建flask后端服务对外提供访问.记录一下在阿里云服务器部署flask项目的操作过程,简单介绍一下使用的阿里云服务器系统配置:ubantu16.04,其他内核版本操作部分命令会有所区别,下面开始详细操作过程! 1.pycharm创建flask项目并打包 2.Python3.…

Linux下使用python统计某个pid的进程的CPU利用率和MEM大小差值

# -*- coding:utf-8 -*- import subprocess import time import sys #支持命令行传参。传入你想测的pid值 pid sys.argv[1] # 第一个时间点的pid的进程信息 proc_info_1 subprocess.check_output("pidstat -r -u -p {}".format(pid), shellTrue).decode(utf-8) tim…

【React】04.MVC模式和MVVM模式

React是Web前端框架 1、目前市面上比较主流的前端框架 ReactAngular&#xff08;NG框架&#xff09;Vue 主流的思想&#xff1a; 不在直接去操作DOM&#xff0c;而是改为“数据驱动思想” 操作DOM思想&#xff1a; 操作DOM比较消耗性能[主要原因就是&#xff0c;可能会导…

基于开源项目OCR做一个探究(chineseocr_lite)

背景&#xff1a;基于图片识别的技术有很多&#xff0c;应用与各行各业&#xff0c;我们公司围绕电子身份证识别自动录入需求开展&#xff0c;以下是我的研究心得 技术栈&#xff1a;python3.6&#xff0c;chineseocr_lite的onnx推理 环境部署&#xff1a;直接上截图&#xff…

Linux shell编程学习笔记22: () $() (()) 的用法小结

最近学习Linux Shell编程&#xff0c;对 () (()) [] [[]]等符号的用法还是有点分不太清楚&#xff0c;于是决定再梳理一下。今天先整理 () $() (()) 的用法。 1 单小括号() 1.1 子shell&#xff08;命令组&#xff09; 括号中的命令将会新开一个子shell顺序执行&#xff0c;所…

基于nginx在视频播放器与服务器之间反向代理流程

1 服务器部署 由于我手里只有内网服务器&#xff0c;可以使用&#xff0c;因此在部署nginx代理服务器&#xff0c;使之在播放器和服务器之间实现反向代理并且缓存内容之前&#xff0c;需要做内网穿透&#xff0c;获得可与外界进行通信的地址。 如果想进行内网穿透&#xff0c;…