java 线程的生命周期

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;
}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值