线程中有六种状态,均在枚举java.lang.Thread.State
中定义:
public enum State {
/**
* 初始化状态,刚刚NEW出来的线程,还没有调用start方法
*/
NEW,
/**
* 运行状态,正在执行中的线程
* 这里有两种说法,一种为在Java线程中,运行状态和就绪状态统称为“运行状态”
* 还有一种说法为:在运行状态之前,应该有种状态叫做就绪状态,表示调用start()方法,等待CPU时间片执行
*/
RUNNABLE,
/**
* 阻塞状态,使用sleep()、wait()可使线程进入阻塞状态
*/
BLOCKED,
/**
* 等待状态,需要其他线程显式地唤醒,否则会永远在等待状态中
*/
WAITING,
/**
* 超时等待状态,和等待状态不同,他会在指定时间后自行返回。
*/
TIMED_WAITING,
/**
* 当线程运行结束或异常导致结束,则为结束状态。
*/
TERMINATED;
}
如果处于就绪状态的线程获得了CPU,开始执行run()方法的线程执行体,则该线程处于运行状态。
线程不可能每时每刻都能够获得CPU,也就是说线程在运行中基本都是在运行状态和阻塞状态之间切换的。
扩展: