当线程被创建并启动之后,它既不是一启动就进入执行状态,也不是一直处于执行状态,在其生命周期中,要经过"新建(New)"、"就绪(Runnable)"、"运行(Running')"、"阻塞(Blocked)"和"死亡(Dead)"五种状态。线程在创建之后,不可能一直霸占着CPU独立运行,需要在多个线程之间切换,所以大部分时间处于运行、阻塞之间切换。
一、新建和就绪状态
(1)、当用new关键字创建一个线程的时候,该线程就处于新建状态;
(2)、调用start()方法之后,线程就进入了就绪状态。当不能立刻进入运行状态,要等待JVM里线程调度器的调度。
注意:只能对处于新建状态的线程调用start()方法,否则会引发异常。
二、运行和阻塞状态
(1)、如果处于就绪状态的线程获得了CPU,就开始执行run方法,处于了运行状态。当分配的时间用完后,又进入了就绪状态,等待下次分配到CPU在进入运行状态。
(2)、遇到以下几种情况,线程会进入阻塞状态:
1)、线程调用sleep()方法主动放弃所占用的处理器资源
2)、线程调用了一个阻塞式IO方法,在该方法返回之时,该线程被阻塞
3)、线程试图获得一个同步监视器,但该同步监视器正被其他线程所持有。
4)、现成在等待某个通知(notify)
5)、线程调用了线程的suspend()方法将该线程挂起。该方法容易造成死锁,应尽量避免使用该方法。
进入阻塞状态的程序遇到以下情况才能恢复进入就绪状态,等待分配到资源进入运行状态:
1)、调用sleep()方法的线程经过了指定时间。
2)、线程调用的阻塞式IO方法已经返回
3)、线程成功的获得了试图取得的同步监视器
4)、线程正在等待的某个通知时,其他线程发出了一个通知(signal)
5)、处于挂起状态的线程被调用了resume()恢复方法
三、线程死亡
(1)、run()或call()方法执行完成,线程正常结束;
(2)、线程抛出一个未捕获的Exception或Error;
(3)、直接调用该线程的stop()方法来结束该线程---该方法容易导致死锁,不推荐。
注意:当主线程结束时,其他线程不收任何影响,并不会随之结束。一旦子线程启动起来后,他就拥有和主线程相同的地位,他不会受主线程的影响。
为了测试某个线程是否已经死亡,可以调用线程对象的isAlive方法,当线程处于就绪、运行、阻塞3中状态是,该方法返回true;当线程处于新建、死亡2种状态时,该方法将返回false.
注意:不要试图对一个已经死亡的线程调用start()方法使它重新启动,该线程不可再次作为线程执行。start方法只能对处于新建状态的线程多使用,且只能使用一次!
相关推荐
Java多线程生命周期的讲解,很详细,希望能帮到大家
Java线程生命周期
以图表形式详细列出java线程生命周期,创建线程,线程就绪,线程阻塞,线程中断,线程唤醒,线程运行之间的关系
Java多线程(二)、线程的生命周期和状态控制
本文主要介绍了Java中线程的5种状态(新建(New)、就绪(Runable)、运行(Running)、阻塞(Blocked)和死亡(Dead))之间的转换图解,有需要的朋友可以参考下
Java多线程--线程的生命周期
主要介绍了Java 线程的生命周期的相关资料,并附简单实例代码,帮助大家理解,需要的朋友可以参考下
四、线程的状态转换和生命周期 4 Java线程:创建与启动 7 Java线程:线程名称的设定及获取 10 Java线程:线程栈模型与线程的变量 12 Java线程:线程的调度-休眠 13 Java线程:线程的调度-优先级 16 Java线程:线程的...
初学Java多线程线程的生命周期.pdf
浅谈Java线程的生命周期——北大青鸟佳音旗舰.docx
Java线程的生命周期和状态控制[定义].pdf
主要介绍了Java 线程的生命周期,结合完整实例形式分析了java线程周期相关的加锁、释放锁、阻塞、同步等原理与操作技巧,需要的朋友可以参考下
4初学Java多线程:线程的生命周期.pdf
主要介绍了Java线程的生命周期和状态控制,需要的朋友可以参考下
Java多线程初学者指南:线程的生命周期.pdf
主要介绍了Java线程的生命周期命名与获取代码实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
线程的生命周期 线程命名 访问线程 线程的启动、停止和连接 总结 第三章 同步技术 银行的例子 异步读取数据 一个进行同步操作的类 同步块 嵌套锁 死锁 返回到银行的例子 同步静态方法 总结 第四章 等待和通知 ...
浅析Java语言中线程的生命周期及实现方式.pdf
主要介绍了Java线程的生命周期的详解的相关资料,希望通过本文能帮助到大家,让大家理解掌握这部分内容,需要的朋友可以参考下
java线程完全教程 为什么要使用线程 创建线程的几种方式 死锁问题 线程生命周期 线程同步 绝对物美价廉