线程对象在不同的运行时期有不同的状态,状态信息就存在于State枚举类中。State枚举类的全限定名:java.lang.Thread.State
public enum State { /** * 至今尚未启动的线程处于这种状态 */ NEW, /** * 正在 Java 虚拟机中执行的线程处于这种状态 */ RUNNABLE, /** * 受阻塞并等待某个监视器锁的线程处于这种状态 */ BLOCKED, /** * 无限期地等待另一个线程来执行某一特定操作的线程处于这种状态 */ WAITING, /** * 等待另一个线程来执行取决于指定等待时间的操作的线程处于这种状态 */ TIMED_WAITING, /** * 已退出的线程处于这种状态 */ TERMINATED; }
调用与线程有关的方法是造成线程状态改变的主要原因。
在调用与线程有关的方法后,会进入不同的线程状态,这些状态之间某些是可双向切换的,比如WAITING和RUNNING状态之间可以循环地进行切换;而有些是单向切换的,比如线程销毁后并不能自动进入RUNNING状态。