1、典型回答
Java 线程的生命周期有以下 6 种:
- NEW (初始化状态)
- RUNNABLE (可运行/运行状态)
- BLOCKED (阻塞状态)
- WAITING (无时限等待状态)
- TIMED_WAITING (有时限等待状态)
- TERMINATED (终止状态)
注:Java 线程状态可能和操作系统的状态叫法和分类是不同的。
2、全面剖析
线程的这 6 种状态也可以在 Thread 的源码中找到,如下所示:

当然你也可以使用 java 代码,来打印所有的线程状态,如下代码所示:

以上程序的执行结果如下图所示:

Java 中线程的生命周期有 6 种:NEW (初始化状)、RUNNABLE (运行/运行状态)、BLOCKED(阻塞状态)、WAITING (无时限等待状态) 、TIMED_WAITING(有时限等待状态) 、TERMINATED(终止状态)。
3、知识扩展
线程状态的转换如下图所示:

- NEW (新建状态):new Thread() 时线程的状态
- RUNNABLE (可运行/运行状态):调用 start() 方法后的状态
- BLOCKED(阻塞状态):调用了 synchronized 加锁之后的状态。获得锁之后就从 BLOCKED 状态变成了RUNNABLE 状态。
- WAITING (无时限等待状态):调用了 wait() 方法之后会进入此状态
- TIMED_WAITING(有时限等待状态):调用了 sleep(long millis) 方法之后会进入此状态
- TERMINATED (终止状态):线程任务执行完成之后就变成此状态

被折叠的 条评论
为什么被折叠?



