天天看点

多线程的运行状态(五种状态)

创建(new)状态

新创建了一个线程对象。准备好了一个多线程的对象(没有调用start()方法 )

就绪(runnable)状态

调用了start()方法, 线程即进入就绪状态。处于就绪状态的线程,只是说明此线程已经做好了准备,随时等待CPU调度执行(获取CPU的使用权),并不是说执行了t.start()此线程立即就会执行;

运行(running)状态

执行run()方法(当CPU开始调度处于就绪状态的线程时,此时线程才得以真正执行,即进入到运行状态。

注:就绪状态是进入到运行状态的唯一入口,也就是说,线程要想进入运行状态执行,首先必须处于就绪状态中;)

阻塞(blocked)状态

处于运行状态中的线程由于某种原因,暂时放弃对CPU的使用权,停止执行,此时进入阻塞状态,直到其进入到就绪状态,才有机会再次被CPU调用以进入到运行状态。根据阻塞产生的原因不同,阻塞状态又可以分为三种:

1.等待阻塞:运行( running )的线程执行 o . wait ()方法, JVM 会把该线程放 入等待队列(waitting queue )中。

2.同步阻塞:运行( running )的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则 JVM 会把该线程放入锁池( lock pool )中。

3.其他阻塞: 运行( running )的线程执行Thread . sleep ( long ms )或 t . join ()方法,或者发出了 I / O 请求时, JVM会把该线程置为阻塞. 当 sleep ()状态超时、 join ()等待线程终止或者超时、或者 I / O 处理完毕时,线程重新转入可运行( runnable )状态。

终止(dead)状态

线程 run ()、 main () 方法执行结束,或者因异常退出了 run ()方法,则该线程结束生命周期。死亡的线程不可再次复生。

线程状态总述

继续阅读