Java 线程的七种状态

Java 解析线程的几种状态详解 从操作系统层面上,任何线程一般都具有五种状态,即创建、就绪、运行、阻塞、终止。在程序中用构造方法创建一个新线程时,如new Thread(),该线程就是创建状态,此时它已经有了相应的内存空间和其它资源,但是还没有开始执行。新建线程对象后,调用该线程的start()方法就可以启动线程。当线程启动时,线程就进入就绪状态(runnable)由于还没有分配CPU,线程将进入线程队列排队,等待CPU服务,这表明它已经具备了运行条件。当系统挑选一个等待执行的Thread对象后,它就会从等待状态进入执行状态。 阅读详情

该原创文章首发于微信公众号:字节流动

Java 线程状态转换图

Java 线程状态转换图

Java 线程状态

在 Java 线程的生命周期中,按复杂的并发场景考虑,可将 Java 线程的状态分为七种,分别是:新建(New),可运行(Runnable 或 Ready),运行(Running),无限期等待(Waiting),限期等待(Timed Waiting),阻塞(Blocked),结束(Terminated)。

新建(New)状态

新创建一个线程对象,尚未执行。

可运行(Runnable 或 Ready)状态

新创建的线程调用 start 方法后便处于 Runnable 状态,刚刚结束等待(获取到锁)或刚结束阻塞状态的线程也会处于 Runnable 状态,处于该状态的线程位于可运行线程池中,等待获取 CPU 资源。

运行(Running)状态

处于 Runnable 状态的线程获取到 CPU 资源,执行程序代码。

无限期等待(Waiting)状态

synchronized 代码块内被锁住的对象调用了它的 wait() 方法或者在当前线程中调用了其他线程的 join() 方法,那么当前线程将会释放占有的锁,释放 CPU 资源,阻塞在等待队列里面,一直等待被 synchronized 修饰的对象调用 notify() 或 notifyAll() 方法唤醒或者 join 的其他线程执行结束(异常退出)。在并发时,处于无限期等待状态的线程被唤醒之后,还要去竞争对象的锁,如果竞争不到,线程将会被阻塞在对象的锁池中,竞争到锁之后,线程将会处于 Runnable 状态。

限期等待(Timed Waiting)状态

与无限期等待(Waiting)状态不同之处在于,调用 wait 和 join 方法时传入了等待限定时间。另外,线程调用 sleep() 方法也会处于限期等待(Timed Waiting)状态,会释放 CPU 资源,但并不会释放锁,一直到休眠结束变成 Runnable 状态。

阻塞(Blocked)状态

线程程序执行到 synchronized 代码块或 Reentrant.lock() 方法,对象的锁被其他线程占用时,当前线程将会被阻塞在对象的锁池中,处于阻塞(Blocked)状态。

结束(Terminated)状态

线程 run 方法执行完毕或者异常退出,则该线程的生命周期终结,不能再次使用。

联系与交流

我的公众号
在这里插入图片描述
我的微信
在这里插入图片描述

JAVA:线程的五大状态 JAVA线程的五大状态 及 状态监测 阅读详情

相关推荐

安装Anaconda和Labelme的教程

1 登录Anaconda官网,选择Download https://www.anaconda.com/distribution/ 2 选择你想下载的Python版本,选择你的操作系统和位数,然后点击Download按钮就开始下载了 3 开始安装 下面两个框框都勾选 点击next,等待安装成功 打开Anaconda Navigator 点击红色圈圈的按钮 在cmd中输入 (1)创建虚拟环境 conda create -n labelme python=3.6 (2)激活虚拟环境 conda activa

qq_42178122的博客 3808

线程的五种状态

1)新建状态(New):当线程对象对创建后,即进入了新建状态,如:Thread t = new MyThread(); 2)就绪状态(Runnable):当调用线程对象的start()方法(t.start();),线程即进入就绪状态。处于就绪状态的线程,只是说明此线程已经做好了准备,随时等待CPU调度执行,并不是说执行了t.start()此线程立即就会执行; 3)运行状态(Running):当CP...

qq_37119960的博客 925

逆向实战:从x-mini签名到RPC调用,Frida动态分析小红书加密协议

本文通过实战案例,详细拆解了小红书App的加密协议逆向分析过程。从识别x-mini签名等关键参数入手,结合静态分析与Frida动态Hook技术,追踪到核心的RPC调用入口,并最终封装成可独立调用的RPC函数,为安全研究和协议理解提供了完整的技术路径。

moss5的博客 1028

【多线程基础】 Java 线程的几种状态

线程共有6种状态:NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED。分别对应于:新建、运行、阻塞、等待、带超时的等待、终止。

书生-w的博客 2万+

医学图像处理(一)使用U-Net进行MRI的肝脏分割

医学图像处理(一)使用U-Net进行MRI的肝脏分割数据集搜集训练集和测试集划分问题一: 测试集不包括GroundTruth问题二:T1和T2的数据能一起训练吗?问题三: T1的图像在文件夹中分成了InPhase和OutPhase,这个有什么区别?分离出肝脏将dicom文件转换为png格式数据增强U-net网络搭建自定义DatasetMain.py实验结果总结 图像分割小白一枚,之前接到一个MRI图像肝脏分割的任务。对于医学图像分割,第一想到的就是Unet. Unet在2015的MICCAI上首次提出,在医

qq_34003876的博客 2万+

MATLAB随机生成m个三维坐标点,且各个坐标点之间的距离不小于n

randi函数 randi(max,m,n); %生成均匀分布的随机整数,max生成的随机整数最大值,生成m行n列的矩阵 编写函数sampling function [x,y,z]=sampling(lowx,upx,lowy,upy,lowz,upz,m,n) %该函数用来产生不重复的随机整数矩阵 %low—随机整数下界;up—随机整数上界;m—坐标点个数;n—各个坐标点之间的最小距离 %编...

qq_45384561的博客 9436

【Java多线程编程】线程的六种状态

本文讲解:多线程的六个状态,NEW状态、RUNNABLE状态、WAITING状态、BLOCKED状态、TIMED_WAITING状态、TERMINATED状态。

我的主页 2433

LabVIEW内存泄漏诊断与优化:从报错到高效运行

本文深入探讨LabVIEW内存泄漏的诊断与优化方法,从理解内存泄漏本质到使用专业工具链进行问题定位,再到高频场景的解决方案和高级优化策略。通过实战案例展示如何解决工业数据采集系统中的内存不足问题,帮助开发者提升LabVIEW应用的稳定性和效率。

moon9的博客 197

一张图带你看懂java线程运行的七种状态

 

u012485165的博客 1134

单细胞双胞过滤-scrublet安装

pip install scrublet ----use-pep517有如下报错,分析可知安装annoy时不会自动更新gcc的版本,centos默认是4.8.5。pip install scrublet ----use-pep517 仍然报错,但似乎不影响使用,提示Successfully installed。打开终端,进入Python环境,输入以下代码,查看Python安装位置。暂时还没尝试是否存在问题,如果存在问题,降级scrublet版本。包的开发依赖的是比较低版本的numpy,会用到。

hzau_t的博客 792

2023年GESP12月认证C++五级真题解析

例如,如果a=4,那么4是最⼩的幸运数,而1不是,但我们可以连续对1做3次+1操作,使其变为4,所以我们可以说,1幸运化后的结果是 4。【题目大意】给一个完全平方数的标准,推导出哪些是超级幸运数,然后判断N个数字中,哪些是超级幸运数,是的输出“lucky”,不是的输出离该数字最近的比它大的数字。前一个数字,下标是j的数字是偶数,后面的数字下标是j+1的是奇数,按照要求,偶数在奇数的后面,要交换。A函数时间复杂度是O(n/2),B函数算法是O(sqrt(n)),大部分情况后者是优的,值更小。

lan_in的博客 1006

java线程(七)_java线程的七种状态

新建状态(New)当用new操作符创建一个线程后, 例如new Thread(r),此时线程处在新建状态。 当一个线程处于新建状态时,线程中的任务代码还没开始运行。就绪状态(Runnable)也被称为“可执行状态”。一个新创建的线程并不自动开始运行,要执行线程,必须调用线程的start()方法。当调用了线程对象的start()方法即启动了线程,此时线程就处于就绪状态。处于就绪状态的线程并不一定立即...

weixin_33204286的博客 321

COMSOL有限元仿真深度指南:连接薄结构与实体结构(I)

COMSOL有限元仿真深度指南:如何在结构力学仿真中连接薄结构与实体结构?

忘了面孔的Batou 1万+

Java线程中的七种状态

新建状态(New) 当用new操作符创建一个线程后, 例如new Thread(r),此时线程处在新建状态。 当一个线程处于新建状态时,线程中的任务代码还没开始运行。 就绪状态(Runnable) 也被称为“可执行状态”。一个新创建的线程并不自动开始运行,要执行线程,必须调用线程的start()方法。当调用了线程对象的start()方法即启动了线程,此时线程就处于就绪状态。 处于...

300

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

java线程的七种状态和三种中断

文章目录新建状态(New)就绪状态(Runnable)运行状态(Running)阻塞状态(Blocked)等待状态(WAITING)限时等待状态(TIMED_WAITING)死亡状态(TERMINATED)使用退出标志中断使用 interrupt 方法中断使用stop方法中断 新建状态(New) 当用new操作符创建一个线程后, 例如new Thread®,此时线程处在新建状态。 当一个线程处于新...

远行的博客 1081

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

java 限时线程_Java线程中的七种状态

新建状态(New)当用new操作符创建一个线程后, 例如new Thread(r),此时线程处在新建状态。 当一个线程处于新建状态时,线程中的任务代码还没开始运行。就绪状态(Runnable)也被称为“可执行状态”。一个新创建的线程并不自动开始运行,要执行线程,必须调用线程的start()方法。当调用了线程对象的start()方法即启动了线程,此时线程就处于就绪状态。处于就绪状态的线程并不一定立即...

weixin_35336900的博客 205

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Java之线程详解(三)——多线程常用API、七种状态、优先级、Lock锁

多线程常用API、七种状态、优先级、Lock锁知识汇总

qq_36216193的博客 1088

线程7种状态的相互转换

<br />今天有同事问到线程的问题,自己突然就有点蒙了,只模糊的记得个大概。<br />当初学习线程的时候把这7个状态记得比自己名字还熟悉<br />还把这7个状态编成了一段凄惨而美丽的爱情故事<br />没想到如今却只能记得个大概<br />真验证了“好记性不如烂笔头”的真理<br />还是赶快回忆一下吧<br /><br />先从图片开始<br /><br /><br />小小的作下解释:<br />1、线程的实现有两种方式,一是继承Thread类,二是实现Runnable接口,但不管怎样,当我们ne

stardust_oak的专栏 828

【J2SE】线程7种状态的相互转换

[size=medium]本文转自:http://www.blogjava.net/liver/archive/2009/06/04/279924.html 今天有同事问到线程的问题,自己突然就有点蒙了,只模糊的记得个大概。 当初学习线程的时候把这7个状态记得比自己名字还熟悉 还把这7个状态编成了一段凄惨而美丽的爱情故事 没想到如今却只能记得个大概 真验证了“好记性不如烂笔头”的真理...

iteye_1900的博客 151

Java中线程的7大状态的基本介绍

Java中线程的7大状态的基本介绍

m0_72014660的博客 243

线程的状态

对于进程来说,核心状态有 就绪态 和 阻塞态。那么对于线程来说,也同样有 就绪态和阻塞态。线程除了这两种状态,还有其他六种状态

m0_67872788的博客 556

多线程(六)线程的五大生命周期,六个状态,七种基础状态

关于线程的六个状态可以看一下:Java线程的6个状态 建议先看一下上面的文章,再看下面的文章。 线程的五大生命周期 NEW:         线程新建状态 RUNNABLE:     就绪状态 RUNNING:          运行状态 BLOCKED:       堵塞状态 TERMINTED:    终止状态 看完Java线程的6个状态我们会发现五大状态比Thread.state多了一个RUNNING状态,但是少了TI

qq_42856647的博客 4583

图解Java线程状态转换

大家好,我是阿星,好久不见,欢迎来到Java并发编程系列番外篇线程状态转换,内容通俗易懂,请放心食用。 线程状态 先来个开场四连问 Java线程状态有几个? Java线程状态是如何转换? Java线程状态转换什么情况会进入锁的等待队列? Java线程状态转换什么情况会进入锁的同步队列? 一提到Java线程状态,不少读者立马想到线程状态转换图,但细想,印象又不深刻,只记得有那么几个状态。 再要你说出Java线程状态是如何转换的,脑子里可能就如下图一样,已经是一团浆糊了。 别慌,阿星为了帮

程序猿阿星 806

线程---线程的几种状态

标题

nn1__2970的博客 183
上一篇: 在 Android 系统源码中自定义系统服务(Custom System Service in AOSP)
下一篇: NDK OpenGL ES 3.0 开发(十):深度测试
字节流动
字节流动 优质创作者: 编程框架技术领域 优质创作者: 编程框架技术领域 领域专家: 嵌入式与硬件开发技术领域 领域专家: 嵌入式与硬件开发技术领域
博客等级 码龄11年 1912粉丝 168原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

字节流动

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值