Java的线程状态是什么


这篇文章主要介绍“Java的线程状态是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java的线程状态是什么”文章能帮助大家解决问题。Java的每个线程都具有自己的状态,Thread类中成员变量threadStatus存储了线程的状态:在Thread类中也定义了状态的枚举,共六种,如下:threadStatus初始值为0,对应的就是NEW状态。NEW:新建状态,new Thread()时处于这个状态,此时线程还未开始执行RUNNABLE:执行状态,当调用了start方法后,线程处于此状态,当然此刻CPU不一定正在执行它BLOCKED:阻塞状态,线程等待锁时处于此状态WAITING:无限期等待状态,需要被唤醒的等待属于此状态,如Object.waitTIMED_WAITING:有限期等待状态,调用一些有超时时间的等待方法会进入此状态,如Thread.sleep、Object.wait、Thread.join、Lock.tryLock、Condition.awaitTERMINATED:退出状态,可能是正常运行完毕,也可能是抛出了异常导致线程终止我们可以通过getState获取线程的状态:接下来,我们通过示例来感受线程状态的变化。示例一:输出:NEW
RUNNABLE
sleep
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
run
TERMINATED
TERMINATED
TERMINATED
TERMINATED
TERMINATED
TERMINATED
TERMINATED可以看出,线程创建后,初始状态为NEW;调用start方法后状态变更为了RUNNABLE;当线程内执行了sleep,休眠2秒钟,状态变更为了TIMED_WAITING;当线程执行完成后,状态变更为了TERMINATED。示例二:本示例演示在多线程争抢锁的情况下,线程状态的变化。输出:t1 lock t1获得了锁
t1:TIMED_WAITING t1 sleep,进入有限等待状态
t2:BLOCKED t2未获得锁,因此进入阻塞状态
t1:TIMED_WAITING
t2:BLOCKED
t1:TIMED_WAITING
t2:BLOCKED
t1 exit t1释放锁,执行完成,退出
t2 lock t2获得锁
t1:TERMINATED t1已经是退出状态
t2:TIMED_WAITING t2 sleep,进入有限等待状态
t1:TERMINATED
t2:TIMED_WAITING
t1:TERMINATED
t2:TIMED_WAITING
t1:TERMINATED
t2:TIMED_WAITING
t2 exit t2释放锁,执行完成,退出
t1:TERMINATED t1为退出状态
t2:TERMINATED t2为退出状态示例三:本示例演示了线程如何进入和退出WAITING状态。输出:t1:NEW
t1:RUNNABLE
t1:WAITING 调用了obj.wait()进入无限等待状态
t1:WAITING
t1:WAITING
t1:BLOCKED 主线程获得锁,进行notify,t1进入了阻塞状态
exit t1线程退出同步块,执行完成
t1:TERMINATED t1线程退出
t1:TERMINATEDJava Thread的threadStatus字段值的更新代码位于hotspot c++源码中,JDK源码中看不到。Java的线程状态并非是操作系统的实际线程状态,但与操作系统的线程状态是有对应免费云主机域名关系的,后续有需要深入分析操作系统原理、hotspot源码再展开。关于“Java的线程状态是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注百云主机行业资讯频道,小编每天都会为大家更新不同的知识点。

相关推荐: 怎么用vue获取屏幕的宽度

本篇内容主要讲解“怎么用vue获取屏幕的宽度”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用vue获取屏幕的宽度”吧!1.使用document.documentElement方法获取屏幕的宽高windowWid…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 02/18 18:07
下一篇 02/18 18:08

相关推荐