Java线程的生命周期包括哪几种状态?

在java中,任何对象都要有生命周期,线程也不例外,它也有自己的生命周期。当Thread对象创建完成时,线程的生命周期便开始了,当run()方法中代码正常执行完毕或者线程抛出一个未捕获的异常(Exception)或者错误(Error)时,线程的生命周期便会结束。线程的整个生命周期可以分为5个阶段,分别是新建状态(New)、就绪状态(Runnable)、运行状态(Running)、阻塞状态(Blocked)和死亡状态(Terminated),线程的不同状态表名了线程当前正在进行的活动。在程序中,通过一些操作可以使线程在不同状态之间转换,如下图:

Java线程的生命周期包括哪几种状态?

上图中展示了线程各种状态的转换关系,箭头表示可转换的方向,其中,单箭头表示状态只能单向的转换,例如,线程只能从新建状态转换到就绪状态,反之则不能;双箭头表示两种状态可以互相转换,例如,就绪状态和运行状态可以互相转换。通过一张图还不能完全描述清楚线程各状态之间的区别,接下来针对线程生命周期中的五种状态分别进行详细讲解,具体如下。

1. 新建状态(New)

创建一个线程对象后,该线程对象就处于新建状态,此时它不能运行,与其他Java对象一样,仅仅由Java虚拟机为其分配了内存,没有表现出任何线程的动态特征。

2. 就绪状态(Runnable)

当线程对象调用了start()方法后,该线程就进入就绪状态。处于就绪状态的线程位于线程队列中,此时它只是具备了运行的条件,能否获得CPU的使用权并开始运行,还需要等待系统的调度。

3. 运行状态(Running)

如果处于就绪状态的线程获得了CPU的使用权,并开始执行run()方法中的线程执行体,则该线程处于运行状态。一个线程启动后,它可能不会一直处于运行状态,当运行状态的线程使用完系统分配的时间后,系统就会剥夺该线程占用的CPU资源,让其他线程获得执行的机会。需要注意的是,只有处于就绪状态的线程才可能转换到运行状态。

4.阻塞状态(Blocked)

一个正在执行的线程在某些特殊情况下,如被人为挂起或执行耗时的输入/输出操作时,会让出CPU的使用权并暂时中止自己的执行,进人阻塞状态。线程进人阻塞状态后,就不能进入排队队列。只有当引起阻塞的原因被消除后,线程才可以转入就绪状态。

下面就列举一下线程由运行状态转换成阻塞状态的原因,以及如何从阻塞状态转换成就绪状态。

·当线程试图获取某个对象的同步锁时,如里该销被其他线程所持有,则当前线程会进入阻塞状态,如果想从阻塞状态进入就绪状态就必须获取到其他线程所持有的锁。

·当线程调用了一个阻塞式的I/O方法时,该线程就会进入阻寒状态,如果想进入就绪状态就必须要等到这个阻塞的I/O方法返回。

·当线程调用了某个对象的wait()方法时,也会使线程进入阻塞状态,如果想进入就绪状态就需要使用notify()方法唤醒该线程。

·当线程调用了Thread的sleep(long millis)方法时,也会使线程进入阻塞状态,在这种情况下,只需等到线程睡眠的时间到了后,线程就会自动进入就绪状态。

·当在一个线程中调用了另一个线程的join()方法时,会使当前线程进入阻塞状态,在这种情况下,需要等到新加入的线程运行结束后才会结束阻塞状态,进入就绪状态。

需要注意的是,线程从阻塞状态只能进入就绪状态,而不能直接进人运行状态,也就是说,结束阻塞的线程需要重新进入可运行池中,等待系统的调度。

5.死亡状态(Terminated)

如果线程调用stop()方法或nun()方法正常执行完毕,或者线程抛出一个未捕获的异常(Exception)错误(Error),线程就进入死亡状态。一旦进入死亡状态,线程将不再拥有运行的资格,也不能再转换到其他状态。

本文来自投稿,不代表重蔚自留地立场,如若转载,请注明出处https://www.cwhello.com/262961.html

如有侵犯您的合法权益请发邮件951076433@qq.com联系删除

(0)
黑马程序员黑马程序员订阅用户
上一篇 2023年5月13日 12:47
下一篇 2023年5月13日 12:47

相关推荐

  • 关于网店商品定价的几种销售技巧。

            说到“价格仗”这个词,想必开网店的朋友们都有所耳闻,在此如何开网店的小编并不是鼓励各位卖家采用这个手段来实现自己利益增长的意思,呵呵~~请大家不要误会,说到底这是一种不科学的手段并不可取,下面来…

    2023年10月27日
    00
  • 钻展推广有哪几种方式?五种方式推荐。

    淘宝直通车推广、淘宝客推广、钻展推广是淘宝商城推广方式中最受欢迎的三种推广方式。淘宝商家们可以任意选择和搭配这些推广方式,大家知道钻展推广有哪几种方式?1、地域分析推广成交地域分布基本按经济发达程度排…

    2023年10月20日
    02
  • 关于做淘客一般几种推广方式。

    淘宝客推广方式在淘宝平台中非常的受淘宝商家们的欢迎,很多的淘宝商家们都有使用这种推广方式,而且它是一种付费推广方式哦,一般来说做淘客一般几种推广方式呢?1.社群推广社群推广是最常见的推广方式,这种推广方…

    2023年10月29日
    014
  • 分享杭州SEO优化:常见的白帽SEO技术有哪几种。

    白帽seo技术是站长圈比较正规的优化手法,是当今网站优化的主流,其他不正规的优化手法建议站长不要乱用,有可能会受到搜索引擎的惩罚。接下来,小编seo分享白帽技术的特点以及好处和常用的一些手法。 白帽SEO技术…

    2023年6月27日
    00
  • 我来说说常用的几种付费网店推广总结。

    常用的几种付费网店推广总结,作为网店掌管的您,如果觉得免费的网店推广方法没有什么效果的话,你可以考虑一下付费推广方法,下面为您介绍几种常用的。 一、加入消保 推荐指数:★★★★推荐理由:这是效果最明显的提…

    2023年10月27日
    00
  • 小编教你2023年几种的淘宝封店原因及避免方法。

    淘宝开店最怕的就是违规封店了,但是很多新手卖家不了解规则,下面给大家说下2017年最新的淘宝封店原因及避免方法汇总,一起看下。封店乃是灭顶之灾,谁都不愿看到辛辛 货源网向您推荐本文:2019年几种的淘宝封店原…

    2023年10月21日
    00
  • 二叉树有几种遍历方式?

    二叉树(Binary Tree) 是一种树形数据结构,其中每个父节点最多可以有两个子节点。 二叉树的每个节点(node)包含三个属性:data 数据、left 左子节点的地址、right 右子节点的地址。满二叉树(Full Binary Tree):每个…

    2023年5月7日 默认文章
    00
  • 分享几种能够增加反链的网站推广方案分享给你。

    如何获得反向链接是网站推广中很重要的一部分,在这方面每个人都有自己的方法,小编做网站推广才一年多点,通过自己的不断研究实践,在做网站推广方案方面也算是积累了一点成绩,总结出自己独到的网站优化方法,现…

    2023年4月23日
    04

联系我们

QQ:951076433

在线咨询:点击这里给我发消息邮件:951076433@qq.com工作时间:周一至周五,9:30-18:30,节假日休息