全国咨询/投诉热线:400-618-9090

首页技术文章正文

Java基础教程:多线程(4)-----线程的生命周期

更新时间:2017-11-14 来源:黑马程序员 浏览量:

任何对象都有生命周期,线程也不例外,它也有自己的生命周期。线程的整个生命周期分为六个阶段,分别是新建状态(New)、可运行状态(Runnable)、运行状态(Running)、阻塞状态(Blocked)、等待状态(Waiting)和死亡状态(Terminated),线程的不同状态表明了线程当前正在进行的活动(有些地方把等待状态分为两种,加了一个定时等待Timed-Waiting)。

下面对线程生命周期中的六种状态进行详细说明。

1. 新建状态(New)

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

2. 可运行状态(Runnable)

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

3. 运行状态(Running)

如果处于可运行状态的线程获得了CPU的使用权,开始执行run()方法中的线程执行体,则该线程处于运行状态。当一个线程启动后,它不可能一直处于运行状态(除非它的线程执行体足够短,瞬间就结束了),系统会为每一个线程分配一小段的时间来处理任务,当线程用完了这段时间,系统就会剥夺该线程占用的CPU资源,让其它线程获得执行的机会。需要注意的是,只有处于可运行状态的线程才可能转换到运行状态。

4. 阻塞状态(Blocked)和等待状态(Waiting)

如果线程由于某些原因放弃了CPU的的使用权,暂时停止运行,此线程就进入了阻塞或者等待状态,阻塞或者等待状态都是由运行状态转换而来的。下面列举出线程进入阻塞状态或等待状态的原因。

线程进入阻塞的原因:

l 线程试图获取某个对象的同步锁,而该锁被其它线程持有

l 当线程调用了一个阻塞式的IO方法

线程进入等待状态原因:

l 线程调用了某个对象的wait()方法

l 线程调用了Thread的sleep(longmillis)方法

l 线程调用了另一个线程的join()方法

当正在执行的线程进入阻塞或者等待状态后,其它处于可运行状态的线程就可以获得执行的机会。被阻塞或者等待的线程会在适当的时候重新进入可运行状态,等待系统的调度。下面列举出线程由阻塞状态或等待状态进入可运行状态的时机。

线程由阻塞状态进入可运行状态的时机:

l 线程成功地获取了某个对象的同步锁

l 阻塞式的IO方法已经返回

线程由等待状态进入可运行状态的时机:

l 其它线程调用了某个对象的notify()或者notifyAll()方法

l Thread的sleep(longmillis)方法经过了指定的时间

l 调用join()方法的线程执行完毕

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

5. 死亡状态(Terminated)

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

通过上面的讲解,大家对线程的各种状态以及状态之间的转换条件都有了详细的了解,下面通过一张图更清楚的描述这流中状态的转换关系:友情提示:获得更多学科学习视频+资料+源码,请加QQ:3276250747。


本文版权归黑马程序员JavaEE学院所有,欢迎转载,转载请注明作者出处。谢谢!


作者:黑马程序员JavaEE培训学院


首发:http://java.itheima.com/


相关推荐:

javaee

python

web

ui

cloud

test

c

netmarket

pm

Linux

movies

robot

http://www.itcast.cn/subject/uizly/index.shtml?seozxuids

14天免费试学

基础班入门课程限时免费

申请试学名额

15天免费试学

基础班入门课程限时免费

申请试学名额

15天免费试学

基础班入门课程限时免费

申请试学名额

15天免费试学

基础班入门课程限时免费

申请试学名额

20天免费试学

基础班入门课程限时免费

申请试学名额

8天免费试学

基础班入门课程限时免费

申请试学名额

20天免费试学

基础班入门课程限时免费

申请试学名额

5天免费试学

基础班入门课程限时免费

申请试学名额

0天免费试学

基础班入门课程限时免费

申请试学名额

12天免费试学

基础班入门课程限时免费

申请试学名额

5天免费试学

基础班入门课程限时免费

申请试学名额

5天免费试学

基础班入门课程限时免费

申请试学名额

10天免费试学

基础班入门课程限时免费

申请试学名额
在线咨询 我要报名