JDK中 Thread类中有个枚举State
Java线程状态
- 新建(NEW)
- 可运行(RUNNABLE)
- 阻塞(BLOCKED)
- 等待(WAITING)
- 时间等待(TIMED_WAITING)
- 终止(TERMINATED)
Java线程状态变化
- 创建线程对象是新建状态
- 调用start方法转变为可执行状态
- 线程获取到CPU执行权,执行结束是终止状态
- 在可执行状态中,如果没有获取CPU的执行权,可能切换到其他状态
- 如果没有获取到锁(synchronized或lock)进入阻塞状态。获取到锁再切换为可执行状态
- 如果线程调用了wait方法进入等待状态,其他线程调用notify方法唤醒后可切换为可执行状态
- 如果线程调用sleep(10)方法,进入计时等待状态,到时间后可切换为可执行状态