Java线程状态
Java线程有六个状态,可以在Thread类中的枚举类型State中查看。
1. NEW
当Thread刚创建,并且还未调用start()方法,此时的状态就是NEW。
2. RUNNABLE
一个RUNNABLE状态的线程已经运行在JVM中,但是它可能需要等待某些操作系统的资源,例如CPU。
3. BLOCKED
一个BLOCKED状态的线程正在等待获取一个锁,例如线程A进入了synchronized方法,若线程B也希望进入synchronized方法,此时线程B等待获取锁,进入BLOCKED状态。
4. WAITING
由于调用了下列没有timeout参数的方法,线程将会进入WAITING状态。也就是说,WAITING状态的线程等待另一个线程完成一个特殊的行为。
- Object.wait
- Thread.join
- LockSupport.park
5. TIME_WAITING
TIME_WAITING状态的线程会等待一段特定的时间。当调用下列带timeout参数的方法时会进入TIME_WAITING状态。
- Thread.sleep
- Object.wait
- Thread.join
- LockSupport.parkNanos
- LockSupport.parkUntil
6. TERMINATED
当线程完成任务后进入TERMINATED状态。
详细分析可以看这篇博客Java线程状态分析