其实这是一个面试题。
按照 Thread.State 的定义,一个线程可能处在以下六种状态之一 :
NEW
线程对象被创建,但是还未开始。即还没有调用过 Thread.start
RUNNABLE
线程正在运行,或者等待分配运行资源
BLOCKED
等待进入同步块(monitor lock),注意与Lock对象的区别。
或者在调用 Object.wait 之后再次进入同步的块/方法(意思就是再次进入的这个时候依旧没有获取到锁)。
WAITING
等待其他线程的操作,触发进入此状态是操作:
Object.wait with no timeout
Thread.join with no timeout
LockSupport.park //比如condition.await()
TIMED_WAITING
等待一定的时间
Thread.sleep
Object.wait with timeout
Thread.join with timeout
LockSupport.parkNanos
LockSupport.parkUntil
TERMINATED
线程已经执行完成