从JDK1.5开始,Thread类里加了线程状态的枚举:State。
其共有6项:NEW,RUNNABLE,BLOCKED,WAITING,TIMED_WAITING,TERMINATED。
NEW:线程创建到start方法被调用前,状态为NEW;
RUNNABLE:对JVM而言是正在执行,但可能正在等待操作系统的CPU时间片;
BLOCKED:等待monitor lock,即等待进入synchronized同步块或方法;
WAITING:当调用了Object.wait(),Thread.join(),LockSupport.park()后,进入等待状态;wait要等其他线程调用Object.notify或notifyAll,join要等指定的线程状态为TERMINATED;
TIMED_WAITING:类似WAITING,只是加了超时时间;Thread.sleep时,也是进入该状态;
TERMINATED:线程完成了所有的事情,最终的状态;
一个线程,都会经历 NEW,RUNNABLE,TERMINATED这3个状态。
当代码中有 synchronized时,有可能会出现BLOCKED状态。
有调用wait,join,park等方法时,会出现WAITING状态或TEMED_WAITING状态。