您的位置:首页 > 编程语言 > Java开发

java 线程的生命周期

2013-09-18 22:05 281 查看
Thread线程的生命周期:

线程的生命周期分为创建(new)、就绪(Runnable)、运行(running)、阻塞(Blocked)、死亡(Dead)五种状态



创建(new)

在Java程序中创建线程有几种方法。每个Java程序至少包含一个线程:主线程。其它线程都是通过Thread构造器或实

例化继承类Thread的类来创建的。在一个线程对新线程的Thread对象调用start()方法之前,这个新线程并没有真正

开始执行。

一般常用的两种构造方法:Thread();Thread(Runnable target)

就绪(Runnable)

处于就绪状态的线程已经具备了运行条件,即已经启动了start()方法,但还没有分配到CPU,处于线程就绪队列,

等待系统为其分配CPU。这个过程成为cpu调度,线程对象一旦获得cpu就会进入运行状态。

注意:线程一旦被启动就不能再启动,即不能再调用start()方法。

运行(running)、阻塞(Blocked)

处于运行状态的线程开始执行run()方法。在运行状态中有很多种线程状态之间切换的情况,所以此状态也是线程

生命周期中最复杂的一个状态。

当发生如下情况线程会进入阻塞状态:

①、线程调用sleep()方法主动放弃所占用的系统资源

②、线程调用一个阻塞式IO方法,在该方法返回之前,该线程被阻塞

③、线程试图获得一个同步监视器,但更改同步监视器正被其他线程所持有

④、线程在等待某个通知(notify())

被阻塞的线程会在如下情况下进入就绪状态(重新被激活):

①、sleep()方法睡眠时间已到

②、等待的其他线程或程序持有的“锁”已被释放

③、正在等待触发条件的线程,条件得到满足

④、等待的操作返回的线程,操作正确返回(wait())

死亡(Dead)

正常死亡:当线程的run()方法执行完毕

非正常死亡:被强制终止;线程抛出未捕获的异常或Error

在这里说一种线程被强制终止的方法:

在抛出的InterruptedException异常中加上break或return,然后调用interrupt()方法即可

catch (InterruptedException e) {

e.printStackTrace();

break;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: