线程的生命周期
线程的六种状态: NEW、RUNNABLE、BIOCKED、WAITING、TIME_WAITING、TERMINATED。
- NEW:初始状态,线程被构建,但是还没调用start方法;
- RUNNABLE: 运行中状态,包括了就绪状态跟运行两种状态;
- BLOCKED: 阻塞状态,线程进入等待状态,也就是线程因为某种原因放弃了CPU的执行权,分为多种情况
等待阻塞: 运行的线程执了wait方法,jvm把当前线程放入到等待队列中
同步阻塞:运行的线程获取到对象的同步锁时,若该同步锁被其他线程占用了,jvm会把当前线程放入锁池中
其他阻塞: 运行的线程执行了Thread.sleep()或者join方法,JVM会把当前线程设置为阻塞状态,当sleep结束或者 join线程终止则线程回复
- WAITING: 一个正在无限期等待另一个线程执行一个特别的动作的线程
- TIME_WAITING: 超时等待状态,超时以后自动返回
- TERMINATED:终止状态, 表示当前线程执行完毕。
图解
首先线程的出生到销毁是上面的3个状态;
接着线程可以调用wait()方法变成WAITING状态
当有两个线程的时候,我们加锁可以转变线程的状态为BLOCKED
最后当我们执行wait(),join(),sleep() 会进入TIME_WAITING状态