Java线程的不同状态

介绍

在Java中,线程可以具有状态。 Thread.State枚举定义Java线程可以具有的不同状态。 该枚举定义了以下值–

  1. 可运行
  2. 已封锁
  3. 等候
  4. TIMED_WAITING
  5. 已终止

在接下来的部分中,我将简要概述这些状态以及它们之间的可能过渡。

Java线程的状态

这是线程首次创建时所获得的默认状态。

可运行

线程一开始执行,便立即进入RUNNABLE状态。 请注意,等待获取CPU来执行的线程仍处于此状态。

已封锁

线程在等待监视器锁定时被阻塞,便立即进入BLOCKED状态。 这可以通过以下两种方式之一进行:

  1. 它正在等待获取锁定以输入同步的块/方法。
  2. 它正在等待重新获取对其调用Object.wait方法的对象的监视器锁定。

等候

线程由于调用以下方法之一而移至此状态–

  1. Object.wait没有超时
  2. Thread.join没有超时
  3. LockSupport.park

TIMED_WAITING

线程由于调用以下方法之一而移至此状态–

  1. 线程睡眠
  2. Object.wait超时
  3. Thread.join超时
  4. LockSupport.parkNanos
  5. LockSupport.parkUntil

已终止

线程终止后,它将立即移至该状态。

可能的状态转换

下图显示了不同状态之间可能的转换–

Java线程


安排执行线程后,它将立即进入RUNNABLE状态。 已经用第一个箭头(标记为1)显示了此过渡。

从RUNNABLE状态,线程可以移至BLOCKED,WAITING,TIMED_WAITING或TERMINATED状态中的任何一个。 从理论上讲,如果线程不等待获取任何锁,或者不休眠,或者不调用任何使其等待的方法,则它仅完成执行并直接进入TERMINATED状态(标记为2d)。

当然,在实际应用中,上述情况极不可能发生。 线程通常试图获取锁,在这种情况下,如果线程必须等待锁,则它会进入BLOCKED(标记为2a)状态。 线程还显式地等待某些先决条件为真/来自其他线程的操作,在这种情况下,线程将根据等待是否计时而移至WAITING(标记为2b)或TIMED_WAITING(标记为2c)状态。

一旦线程移至BLOCKED状态,接下来唯一允许的过渡就是移至RUNNABLE状态(标记为3d)。

同样,从等待状态的唯一可能转换是移动到已阻止状态(标记为3c)。

请注意,Internet上的某些文章错误地添加了从WAITING到RUNNABLE状态的过渡。 这只是不正确的。 线程永远不能直接从WAITING状态进入RUNNABLE状态。 我们可以通过一个例子来了解其原因。

假设我们有一个线程T,该线程当前处于RUNNABLE状态,并持有三个对象a,b和c的监视器锁定,如下图所示–

Java线程

此时,T调用c.wait(),此后它不再持有对象c的监视器锁定–

Java线程

使用调用notify / notifyAll通知T时,它立即停止等待并与其他线程(例如X和Y)竞争以获取c的监视器锁定–

Java线程


根据上面的定义,它是BLOCKED状态。 仅在获取了c的监视器锁定后,T才进入RUNNABLE状态。 可以对Thread.join()(内部使用Object.wait())和LockSupport.park()应用类似的推理。

让我们回到原始状态转换图。 如我们所见,线程可以从TIMED_WAITING状态移动到RUNNABLE(标记为3b)或BLOCKED(标记为3a)状态。 在这种情况下,可以转换为RUNNABLE,因为线程可以在调用Thread.sleep方法后进入TIMED_WAITING状态,在这种情况下,它保留当前持有的所有监视器锁定。

当线程在RUNNABLE,BLOCKED,WAITING或TIMED_WAITING状态之间来回移动后,完成执行时,它将一劳永逸地进入TERMINATED状态。

我们如何获得线程的当前状态?

我们可以使用Thread.getState()方法来检索线程的当前状态。 我们可以使用此值来监视或调试应用程序在生产中可能遇到的任何并发问题。

结论

在本文中,我们简要回顾了Java线程可以具有的不同状态,以及线程如何在这些状态之间移动。 与往常一样,任何反馈/改进建议/评论都将受到高度赞赏!

翻译自: https://www.javacodegeeks.com/2019/01/different-states-java-threads.html

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

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

相关文章

【渝粤题库】广东开放大学 电子商务职业技能 形成性考核

选择题 题目:有形商品在线销售有两种形式,下列有一类与其它不相同的销售形式为 答案: A、一号店 B、优衣库 C、京东商城 D、当当网 题目:( ) 互认识或不认识的消费者联合起来,加大与商家谈…

【渝粤题库】广东开放大学民法 形成性考核

选择题 题目:根据《合同法》的规定,下列合同中哪些属于有名合同? 题目:所谓合同的争议是指哪些争议? 题目:下列合同中,属于诺成合同的是 题目:甲百货商店与乙电视机厂订立买卖合同&a…

java中的双与_java 双冒号是什么操作符?

双冒号::在JDK8的Lambda表达式函数中开始使用,用作方法引用。具体用法,咱们来举个例子:假设有个Person类:public class Person {public enum Sex {MALE, FEMALE}String name;LocalDate birthday;Sex gender;String emailAddress;p…

【渝粤题库】陕西师范大学164104 网络财务管理 作业(高起专)

《网络财务管理》作业 一、选择题 1.财务管理网络化( )了地域限制,提高了信息传输速度,增加了信息的使用价值,降低了企业成本,并促使传统的财务管理演化为网络财务管理。 A.打破 B.连通 C.更新 D.重组 2.拥有雄厚的( &…

q7goodies事例_Java 8 Friday Goodies:Lambda和SQL

q7goodies事例在 Data Geekery ,我们喜欢Java。 而且,由于我们真的很喜欢 jOOQ的流畅的API和查询DSL ,我们对Java 8将为我们的生态系统带来什么感到非常兴奋。 我们已经 写了一些关于Java 8好东西的博客 ,现在我们觉得是时候开始一…

【渝粤题库】陕西师范大学180208 产品管理 作业(专升本)

《产品管理》作业 一、单选题 1、产品的内涵不断扩大,产品的外延也发展到产品五层次,最基本的层次是( ),即向消费者提供的产品基本效用和利益,也是消费者真正要购买的利益和服务。 A 期望产品 B 一般产品 C…

【渝粤题库】陕西师范大学200221 中国思想史 作业(高起专)

一、单选题 "性善论"是谁提出来的? A老子 B孟子 C孔子 D庄子 2 ()(公元240~248年)是魏齐王曹芳的年号。 A建元 B元光 C元平 D正始父义、母慈、兄友、弟恭、子孝五种美德合称? A五义B 五则C五典 …

IDE日志分析方法pt。 2

介绍 在第一部分中,我解释了日志分析的理论方法,我认为这对维持工程师是最合适的。 这位工程师不需要在日志出现时立即对其进行分析,而是专注于对复杂问题的深入分析。 在第二部分中,我将展示一个复杂的模板可以涵盖许多搜索场景&…

【渝粤题库】陕西师范大学200821 课程与教学论(计算机)

《课程与教学论》作业 一、选择题 1.教师应有高尚的思想道德和渊博的知识及教育能力,还必须具备良好的心理素质。下面不属于教师心理素质方面的是( )。 A.意志 B.自我意识 C.情绪 D.…

java电影票选座_jQuery实现电影票选座效果手机端代码

部分js代码//判断页面加载完成window.onload function () {if (document.readyState "complete") {$("body").show();}};var arr []; //已选座位数组var dj 99; //电影票单价 number$(".danjia").text(dj);/*遍历检查售票状态typ 0 可选typ …

【渝粤题库】陕西师范大学201571金融法作业(专升本)

《金融法》作业 一、单项选择题 1.下列银行中属于政策性银行的有( )。 A.中国人民银行 B.中国农业银行 C.浦东发展银行 D.中国进出口银行 2.中央银行的职能不包括( )。 A.发行的银行 B.储户的银行 C.银行的…

java char指针数组_简单总结C语言中各种类型的指针的概念

C语言中有很多关于指针的使用,指针也是C语言的灵魂所在,而且C语言中也有很多有关指针的概念,这里学习并总结了一些知道的概念。常量指针:首先它是一个指针,常量只是用来修饰指针的定语。其定义如下:char co…

【渝粤题库】陕西师范大学202081 管理学 作业 (专升本、高起本、高起专)

《管理学〉作业 一、判断改错 1.使管理科学从重视对物的研究转向重视对人的研究的理论是马斯洛的需求层次理论。 2.根据亨利明茨伯格的研究,管理者扮演的决策方面的角色包括组织发言人、纠纷调解者、资源分配者和谈判者…

【渝粤题库】陕西师范大学202961 教育社会学 作业(高起本、专升本)

《教育社会学》作业 一、 单项选择题 1.从研究对象上讲,教育社会学探究的主要是 A.广义教育 B.中观教育 C.狭义教育 D.社会教育 2.教育社会对自身以外的其他社会现象所发生的功能是 A.教育社会的外功能 B.教育社会的内功能 C.教育社会的负功能…

java 面试指南_Java面试参考指南–第1部分

java 面试指南JAVA面向对象的概念 Java in基于面向对象的概念,它允许更高级别的抽象以实际方式解决任何问题。 面向对象的方法将实际对象中的问题解决方案概念化,更易于在整个应用程序中重用。 例如椅子,风扇,狗,电脑…

java 提交的内存_Java使用内存映射实现大文件的上传

在处理大文件时,如果利用普通的FileInputStream 或者FileOutputStream 抑或RandomAccessFile 来进行频繁的读写操作,都将导致进程因频繁读写外存而降低速度.如下为一个对比实验。package test;import java.io.BufferedInputStream;import java.io.FileIn…

【渝粤题库】陕西师范大学210006幼儿园课程作业(高起专)

《幼儿园课程》(专科)作业 一、单选题 1、活动课程是以( )为中心来组织学习内容的。 A 学科 B 问题 C 概念 D 儿童 2、( )指的是幼儿园教师根据实际情况灵活的将课程方案转化为生动的课程实践(现…

创建一个安全的Spring REST API

“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证。 “如果有用,它将被修改。” 这些智慧之言来自我的QA老师,他们…

【渝粤题库】陕西师范大学292071社会统计学作业(高起专)

《社会统计学》作业 一、单项选择题 1、从历史上看,在社会经济统计学的形成过程中,首先使用“统计学”这一术语的是( )。 A. 政治算术学派 B. 国势学派 C. 数理统计学派 D. 社会经济统计学派 2、社会统计的研究对象是(…

java并发编程十 原子累加器和Unsafe

文章目录 原子累加器cas 锁原理之伪共享 UnsafeUnsafe CAS 操作 原子累加器 累加器性能比较 private static <T> void demo(Supplier<T> adderSupplier, Consumer<T> action) {T adder adderSupplier.get();long start System.nanoTime();List<Thread…