关于Java线程的状态网上的说法不一,有的说是6种状态,有的说是5中状态,索性就查看了一下Java源码。Thread类里面有一个枚举类,如下:
public enum State {
NEW,
RUNNABLE,
BLOCKED,
WAITING,
TIMED_WAITING,
TERMINATED;
}
这个枚举类里面有6种类型,所以Java中的线程有6种状态。
关于各种状态的简单说明:
- NEW(初始):线程被创建后尚未启动。
- RUNNABLE(运行):包括了操作系统线程状态中的Running和Ready,也就是处于此状态的线程可能正在运行,也可能正在等待系统资源,如等待CPU为它分配时间片。
- BLOCKED(阻塞):线程阻塞于锁。
- WAITING(等待):线程需要等待其他线程做出一些特定动作(通知或中断)。
- TIME_WAITING(超时等待):该状态不同于WAITING,它可以在指定的时间内自行返回。
- TERMINATED(终止):该线程已经执行完毕。
状态图
1. 初始状态
通过继承Thread类或实现Runnable接口得到一个线程类,new一个实例出来,这个生成的线程就进入了初始状态。
该线程没有被start()启动,但也不代表调用了start()状态就立即改变状态,中间还有一些步骤,如果在这个启