线程的状态与生命周期

Java语言使用Thread类及其子类的对象来表示线程,新建的线程在它的生命周期内通常要经历五个状态。

线程的生命周期与运行状态如下图:

创建状态:

当一个Thread类或其子类的对象被声明并创建,但是还未被执行的这段时间里,处于一种特殊的创建状态中。此时线程对象已经被分配了内存空间和其他资源,并且已经被初始化,但是该线程还没有被调度。

就绪状态:

就绪状态也可以称为可运行状态,处以创建状态的线程被启动后,将进入线程队列排队等待CPU时间片,此时它已经具备了运行条件。一旦轮到它来享用CPU资源时,就可以脱离创建它的主线程开始自己的生命周期。

运行状态:

当就绪状态的线程被调度并获得CPU资源时,就进入了运行状态。该状态表示线程正在运行,该线程已经拥有了对CPU的控制权。每一个Thread类及其子类的对象都有一个run()方法,当线程对象被调度执行时,它将自动调用本对象的run()方法,从该方法的第一条语句开始执行,一直到运行完毕,除非该线程主动让出CPU的控制权或者CPU的控制权被优先级更高的线程抢占。

 以下情况线程让出CPU的控制权:

线程运行完毕
有比当前线程优先级更高的线程处于就绪状态
线程主动睡眠一段时间
线程在等待某一资源

 阻塞状态:

一个正在执行的线程如果在某种特殊情况下,将让出CPU并且暂时中止自己的执行,线程处于不可运行的状态。

以下情况线程进入阻塞状态:

调用sleep()或者yield()方法
为等待一个条件变量,线程调用了wait()方法
该线程和另一线程join()在一起

一个线程如果处于阻塞状态,它是不能进入排队队列的,只有当引起阻塞的原因消除的时候,线程才会转入就绪状态,重新进入排队队列,等待CPU资源。

死亡状态:

处于死亡状态的线程不具有继续运行的能力。

一般导致死亡状态的原因有两个:

1.正常运行的线程完成了它的所有工作。

2.当进程因故障而运行时,该进程中的线程会被强制终止。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值