Java开发入门到精通--Java多线程之线程状态
小职 2022-01-04 来源 :我是开发者FTD 阅读 1185 评论 0

摘要:本篇主要介绍了Java开发入门到精通--Java多线程之线程状态,通过具体的内容展现,希望对Java开发的学习有一定的帮助。

本篇主要介绍了Java开发入门到精通--Java多线程之线程状态,通过具体的内容展现,希望对Java开发的学习有一定的帮助。

Java开发入门到精通--Java多线程之线程状态


关于Java线程的状态,有的人可能会说有4种状态,有的会说有5种,6种,总之各种各样的说法可能都有。造成这种情况的原因是:有很多的书上常常把操作系统进程状态,线程状态与Java线程状态混在一起谈。下面这个图相信大家在讲多线程的文章中都见到过(或类似):

 Java开发入门到精通--Java多线程之线程状态

 

 

这些其实是操作系统上的书上常会提到的5种 进程(process) 状态:new,ready,running,waiting,terminated。

 

其实最简单的就是直接查看Java源码,就知道Java中线程到底定义了几种状态。如果我们查看JDK源码的话,就会发现Java语言中定义的线程状态是不同于操作系统的,我们可以在Thread.State源码中的注释中看到,它说得很清楚:

 

These states are virtual machine states which do not reflect any operating system thread states。

 

也就是说Java语言中定义的这些状态都是指虚拟机状态,它不反映任何操作系统的线程状态。

 

以RUNNABLE状态为例,源码中的注释是这样说的:executing in the Java virtual machine(正在Java虚拟机中执行)。至于它是否真正在执行,不是我们要操心的事。

 

一个 Java 线程它所对应的操作系统内核线程中的状态可能有Running又有Ready,但在Java虚拟机层面则统一映射成了RUNNABLE 状态。如果Java中觉得没必要去区分这些状态,我们也就没有必要去纠结这些了。

 

还有一些情况下,操作系统也许只有一种状态,但在Java中又作了细分,给出了三种不同的状态,例如会把Java状态中的 BLOCKED,WAITING,TIMED_WAITING 三种状态都笼统地称为 blocked 或者 waiting 。

 

又或者把TIMED_WAITING 状态当作不存在,在很多文章中从来不提有这个状态,显然,这种做法又是受到传统进程状态划分的影响。尽管它与WAITING很像,我们最好按着 Thread.State 中的定义来,不要自己随意发挥。

 

所以这就明白了,那些很多声称Java线程只有4种或5种状态的文章,常常都是自作主张地合并了这些状态,把这些东西混为一谈是非常容易引发混乱的,这个我们将会在后面具体谈到。

 

综上所述,为避免出现混乱,厘清概念所处的层次是非常重要的。

 

下面我们就以 JDK1.8 源码中为标准,分别给大家介绍一下Java线程的这6种状态,下面我们先来看一下 JDK 中对于线程状态的定义都有哪些。

 

线程的6种状态

在 Thread 类的一个内部枚举类 Thread.State 中明确地定义这6种状态,如下图所示:

 Java开发入门到精通--Java多线程之线程状态

 

 

状态含义:

新建态 (NEW):一个尚未启动的线程处于这一状态。(A thread that has not yet started is in this state.)

运行态(RUNNABLE):一个正在 Java 虚拟机中执行的线程处于这一状态。(A thread executing in the Java virtual machine is in this state.)

阻塞态(BLOCKED):一个正在阻塞等待一个监视器锁的线程处于这一状态。(A thread that is blocked waiting for a monitor lock is in this state.)

等待态(WAITING):一个正在无限期等待另一个线程执行一个特别的动作的线程处于这一状态。(A thread that is waiting indefinitely for another thread to perform a particular action is in this state.)

计时等待(TIMED_WAITING):一个正在限时等待另一个线程执行一个动作的线程处于这一状态。(A thread that is waiting for another thread to perform an action for up to a specified waiting time is in this state.)

终止态(TERMINATED):一个已经退出的线程处于这一状态。(A thread that has exited is in this state.)

在程序运行的某个给定时间点上,一个Java线程只能处于这6种状态中的一种。

 

通过上面的介绍,相信大家就可以很清晰的、明确的知道Java线程状态到底有几种状态,又分别都有哪些状态了,虽然可能对各个线程状态的详细含义还不是特别了解,别着急,后面我们会逐一介绍,请大家多多关注后续文章。


208小时视频教程,995份干货资料,领取资料+高薪就业咨询V:z_zhizuobiao

Java开发入门到精通--Java多线程之线程状态

本文由 @小职 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程