线程的五个状态
- 新建状态:线程已经创建,还没有在其上调用start( )方法。
- 就绪状态:也称可运行状态,当线程调用start方法,但是线程调度程序还没有把他选定为运行线程时线程所处的状态。这时线程调用了start( )方法,但是该线程的run( )方法还没有轮到被线程调度程序调用。这种状态的线程都在可运行池中。
- 运行状态:线程调用程序从运行池中选择一个线程作为当前线程时线程所处的状态,这也是线程进入运行状态的唯一方式。如果一个线程想要运行,只能从可运行状态变为运行状态。这种状态的线程是正在执行run( )方法。
- 阻塞状态:线程仍然是活的,但是当前没有条件运行。当等待事件出现之后它可以返回到可运行状态,等待事件通常是等待获取除调度执行需要的CPU之外的其他系统资源。这种状态的线程正处于睡眠状态,等待其他线程首先调度执行状态等。
- 死亡状态:当线程的run( )方法执行完毕线程就会进入死亡状态。线程一旦死去,就不能复生。
注意:
1.线程为“创建状态”时,启动线程成功后进入“就绪状态”,当创建对象,即new Thread()就进入了到创建状态。
2.线程为“就绪状态”时,获得CPU资源进入“运行状态”。线程运行状态,线程才真正执行,当调用start()方法时,线程立即进入到就绪状态,但不意味着立即调度执行。
3.线程为“运行状态”时,线程自然执行结束后,外部干涉终止线程,进行“死亡状态”。
4.线程为“运行状态”时,释放CPU资源后,进入“就绪状态”。
5.线程为“运行状态”时,等待用户输入,线程休眠的时候(如调用sleep、wait或同步锁定,代码不往下执行),进入“阻塞状态”。
6.线程为“阻塞状态”时,解除阻塞后,线程重新进入“就绪状态”,等待CPU调度执行。
欢迎批评指正,提出问题,谢谢!