问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

谈谈OpenJDK中线程的9种状态

发布网友 发布时间:2022-11-30 08:58

我来回答

1个回答

热心网友 时间:2023-11-03 01:01

我在在查找了很多资料还有根据书籍,发现对于线程的状态,网上的说法各种各样的,这里就想做一个总结。

在jdk1.8 的源码当中,java中线程(Thread)的状态,注释里说的很清楚了,沿用的是1.5的,主要分为6种状态,每种状态之间都可以随着操作进行相互转换。后面会有OpenJDK的说法,一共是九种,别着急。

1.新建状态(New):

新创建了一个线程对象这个时候没有对他调用和执行。

2.运行中状态 RUNNABLE:

该状态可以被看成一 个复合状态。它包括两个子状态 :READY和RUNNING。前者表示处于该状态的线程可以被线程调度器(Scheler)进行调度而使之处于RUNNING状态。后者表示处于该状态的线程正在运行,即相应线程对象的run方法所对应的指令正在由处理器执行。执行Thread.yield()的线程,其状态可能会由RUNNING转换为READY。处于READY子状态的线程也被称为活跃线程。

3.阻塞状态 BLOCKED:

一 个线程发起一个阻塞式 1/0 (Blocking I/0)操作后 12 , 或者申请一个由其他线程持有的独占资源(比如锁)时,相应的线程会处于该状态。处于BLOCKED状态的线程并不会占用处理器资源。当阻塞式I/0操作完成后,或者线程获得了其申请的资源,该线程的状态又可以转换为RUNNABLE。

一 个线程执行了某些特定方法之后就会处于这种等待其他线程执行另外一些特定操作的状态。能够使其执行线程变为WAITING状态的方法包括Object. wait()、 Thread.join()、LockSupport.park(Object)。能够使相应线程从WAITING变更为RUNNABLE的相应方法包括: Object.notify()/notify All()和LockSupport. unpark(Object))。

该状态和WAITING类似,差别在于处于该状态的线程并非尤*地等待其他线程执行特定操作,而是处于带有时间*的等待状态。当其他线程没有在指定时间内执行该线程所期望的特定操作时,该线程的状态自动转换为RUNNABLE。

6.终止状态 TERMINATED:

已经执行结束的线程处于该状态。由于一 个线程实例只能够被启动一 次,因此一 个线程也只可能有一次处于该状态。Thread.run()正常返回或者由于抛出异常而提前终止都会导致相应线程处于该状态。
附上源码
public enum State {
/**
* Thread state for a thread which has not yet started.
*/
NEW,

以上是在JDK1.8中的Thread源码中备注的。

然而也有一种说法,在JVM中对状态的定义是九种,这里说的是在OpenJDK中的

2.运行 (RUNNABLE):笔者的理解就是,start之后线程进入到run方法,执行run方法的状态,也就是网上所说的准备(ready)和运行(running);

3.睡眠(SLEEPING):线程调用sleep(),之后抱锁等待的状态;

4.对象等待(IN_OBJECT_WAIT):也就是对象调用wait()方法之后的释放锁等待;

5.对象超时等待(IN_OBJECT_WAIT_TIMED):该状态不同于WAITING,它可以在指定的时间后自行返回

6.挂起(PARKED):该状态是线程没有拿到锁之后,进入等待队列之后一直处于挂起状态;

7.挂起超时(PARKED_TIMED):该状态不同于PARKED,它可以在指定的时间后自行解除挂起

8.阻塞监视(BLOCKED_ON_MONITOR_ENTER):进入同步之后的状态,也就是线程进入到同步块中,或者同步锁中的状态,读者也可以理解为线程进入独占模式下的状态;

9.终止(TERMINATED):表示该线程已经执行完毕;
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
长沙到西昌。坐火车先从长沙到成都、成都东,再到西昌,哪个方便一些 S先生与P先生谜题的题面 为什么首都设在襄阳 改姓可以不随父母性吗 韩艺瑟怎么改姓? 纸、墨、笔、砚是中国传统的文房四宝,墨的使用最早在 [ ] A.商代后期... 想问下创维光伏E企赢模式有哪些优势,到底值不值得投资啊?有没有合作... 太平洋太享e保百万医疗值得入手吗?每年花多少钱? 爱e满分适合哪些人买?注意哪些问题? 太平洋太享e保百万医疗适合哪些人买?价格多少? 木地板有灰怎么处理 新桥街道的领导信息 八个人合唱如何排队形 8人合唱队形 乐摄宝pro runner 350aw 江西均安环保科技有限公司怎么样? 赣州市路鹏科技服务有限公司怎么样 上海东绿科技有限公司怎么样? 赣州市华岳环境科技有限公司怎么样? 莆田二十四景中一处景物的特点 弃恶从德成语解释 华为新能源汽车送充电桩吗 孩子越来越贪玩,成绩下降很快,还不交作业,孩子不诚实该怎样教育孩子? 一元二次方程有一正一负怎么求范围 二次函数的两根式a的作用 迭代法求平方根原理 8.9x1.25-0.09x12.5简便运算? 唐山公交车42路在哪站倒61路 唐山开平马家沟到西站坐几路车 唐山39号小区在那里赵庄小区坐多少路公交可以到达 JDK 版本演进及主要特性 烟盒上有个8字是什么烟 烟盒上一个8是什么烟? 宁波江北万达公寓几楼卖东西 烟盒上有个8写的美国制造是什么烟 盒子上面有一个八那是什么牌子的烟 宁波江北万达的宝丰好不好 鼓楼地铁站到江北万达怎么走 宁波江北万达广场的开业日期 注塑lcp为什么需要测试高温 有收音机外放,手电,的手机? 露天煤业为什么那么强?露天煤业中报好为什么股价跌?002128露天煤业好不好? 长期持有露天煤业股股票?露天煤业股吧股票历史数据?露天煤业股票跌那么多? 露天煤业长期持有的收益?露天煤业股票历史价格?露天煤业跌到什么时候是底? 露天煤业股份股票历史?露天煤业股股票历史行情?露天煤业今天跌 原因? oppo手机v77安装被拦截!我想关闭这个拦截! 这软件没毒!我用e4a开发 想测试一下 请大侠们推荐一款手机 中国邮政储蓄银行的谁承担本行洗钱风险管理的最终责任 鸿门赖留侯中的留侯指谁 求 刘琨《重赠卢谌》 原文、翻译、赏析