线程中所有状态都在Thread的State枚举类中定义
public enum State {
NEW, //表示刚刚创建的线程,尚未启动的状态,等待start()方法的调用
RUNNABLE, //线程执行时,start()执行
BLOCKED, //线程执行时,遇到synchronized同步块/方法后,暂停执行
WAITING, //调用了wait(),join(),LockSupport.park()
//或者在等待另一个线程中调用notify()或notifyall()
TIMED_WAITING, //指定等待时间的等待线程状态
TERMINATED; //线程完成执行,表示结束
}
WAITING与TIMED_WAITING的区别
TIMED_WAITING会进行一个有时间限制的等待。
WAITING会进入到一个无时间限制的等待,等待的是一些特殊的事件;
比如通过wait()方法等待的线程在等待着notify()方法;
比如通过join()方法等待的线程则会等待目标线程的终止。
new Thread() → NEW → start() → RUNNABLE → TERMINATED
RUNNABLE → synchronized() → BLOCKED → synchronized代码块执行完毕 → RUNNABLE
RUNNABLE → wait() / join() ... → WAITING / TIME_WAITING → notify() → RUNNABLE
NEW状态不能NEW状态,TERMINATED状态也不能回到RUNNABLE状态。