线程的六种状态及其生命周期
- New:新建线程,未执行start方法
- Runnable:可运行/运行中的状态
- 正在运行
- 运行前等待CPU分配资源
- 已经拿到CPU资源,运行到一半,CPU资源被分配给其他线程,等待分配CPU资源
- Blocked:进入synchronized修饰的代码块,锁(monitor)已经被其他线程拿走,线程拿不到锁。只针对synchronized
- Waiting:没有设置timeout参数的object.wait()方法
- Timed Waiting:计时等待
- Terminated:已终止
线程六种状态切换图(其中 阻塞状态:BLOCKED,WAITING,TIME_WAITING)
不遵循下图的两种情况:
- Object.wait()状态被唤醒后(很大一部分情况下是获取不到锁的,因为唤醒它的线程需要持有同一把锁,唤醒它的线程完成唤醒动作后可能还没有执行完synchronzed代码块),所以当前线程先进入Blocked状态,抢到锁后再进入Runnable状态
- 在wait期间发生异常,不用先进入Runnable,直接跳到Terminated状态
线程的六种状态