线程生命周期转换图:
1、New 创建状态
当时用new操作符创建一个线程对象时,该线程属于创建状态。处于创建状态的线程只是一个空的线程对象,系统不会为它分配资源。只有在调用start()方法后才会给线程分配资源
2、Runnable 可运行状态
执行线程的start()方法将为线程分配必须的系统资源,安排它运行,并调用线程体run()方法,这样线程就处于可运行状态。可运行状态不同于运行状态,因为线程也许实际上并没有真正运行,它还没有获取到CPU资源。
3、Running 运行状态
4、不可运行状态、Blocked 阻塞状态
处于运行状态的线程转入到不可运行状态
在以下情况线程会进入不可运行状态:
调用sleep()方法
线程调用wait方法等待特定条件的满足
线程输入/输出阻塞
6、Dead 消亡状态
当线程的run方法执行结束,该线程自然消亡
7、等待池
当线程遇到wait方法后,线程会释放掉对象的锁,线程进入到等待池。
8、锁池
当其他线程执行了同一对象的notify方法后,正在等待的线程被唤醒,但是被唤醒的线程还没有获得对象的锁,所以该线程进入到锁池,直到它获得对象的锁,才可以继续往下执行。