线程的状态管理(生命周期)
资源来源:微专业
Jdk1.5之前多线程的有5种状态,即:New,ready,runnable,block,terminated。
线程从创建到销毁的过程称之为生命周期。我们称这5种状态为线程的生命周期。
新建状态(NEW)和死亡状态(TERMINATED)是最容易理解的。
1、New状态:当线程对象被创建出来的时候,还没有调用start方法之前。
2、Ready状态:当线程对象调用了start方法但是此时处于多个线程在争夺CPU使用权的时候。只有争夺到了CPU的使用权才会进入到下一个状态中,否则就一直处于该状态。
3、Running状态:当某个线程抢夺到了CPU的使用权并且开始运行它的业务逻辑的时候。
4、Block状态:线程由于外部的原因导致它无法继续执行业务逻辑的时候。Block状态又有锁阻塞,指定时长的等待和不指定时长的等待。如线程使用synchronized关键字或者调用sleep()方法等进入Block状态。
5、Terminated状态:该状态是线程业务逻辑执行完毕的终止状态。一旦进入该状态线程对象就无法再调用方法了,否则会抛出异常。
线程一旦被阻塞了并且恢复运行之后都会先回到Ready状态,等待抢夺CPU的使用权从而进入到Runnbale状态。
旧版本线程生命周期的流程图:
新版本,下图是Thread类的状态枚举类:
由图可知 Runnable 是旧版本的Ready与Running。增加了Waiting(等待状态)和TimeWaiting(有时间的等待状态)。
新版流程图如下:
代码如下图: