我们先来看看操作系统中的线程状态转换。在操作系统中,线程被视为轻量级的进程,所以线程状态其实和进程状态是一致的。
系统进程/线程转换图
操作系统的线程主要有以下三个状态:
- 就绪状态(ready):线程正在等待使用 CPU,经调度程序调用之后进入 running 状态。
- 执行状态(running):线程正在使用 CPU。
- 等待状态(waiting): 线程经过等待事件的调用或者正在等待其他资源(如 I/O)。
然后我们来看 Java 线程的 6 个状态:
// Thread.State 源码
public enum State {
NEW,
RUNNABLE,
BLOCKED,
WAITING,
TIMED_WAITING,
TERMINATED;
}
NEW
处于 NEW 状态的线程此时尚未启动。这里的尚未启动指的是还没调用 Thread 实例的start()
方法。
private void testStateNew() {
Thread thread = new Thread(() -> {});
System.out