https://learn.lianglianglee.com/专栏/Java 并发编程 78 讲-完/03 线程是如何在 6 种状态之间转换的?.md

本课时我们主要学习线程是如何在 6 种状态之间转换的。

线程的 6 种状态

就像生物从出生到长大、最终死亡的过程一样,线程也有自己的生命周期,在 Java 中线程的生命周期中一共有 6 种状态。

  1. New(新创建)
  2. Runnable(可运行)
  3. Blocked(被阻塞)
  4. Waiting(等待)
  5. Timed Waiting(计时等待)
  6. Terminated(被终止)

如果想要确定线程当前的状态,可以通过 getState() 方法,并且线程在任何时刻只可能处于 1 种状态。

New 新创建

下面我们逐个介绍线程的 6 种状态,如图所示,首先来看下左上角的 New 状态。

https://learn.lianglianglee.com/专栏/Java 并发编程 78 讲-完/assets/Ciqc1F_QfyaAFXAQAAD1xkYN7RE683.png

New 表示线程被创建但尚未启动的状态:当我们用 new Thread() 新建一个线程时,如果线程没有开始运行 start() 方法,所以也没有开始执行 run() 方法里面的代码,那么此时它的状态就是 New。而一旦线程调用了 start(),它的状态就会从 New 变成 Runnable,也就是状态转换图中中间的这个大方框里的内容。

Runnable 可运行

https://learn.lianglianglee.com/专栏/Java 并发编程 78 讲-完/assets/Ciqc1F_Qfy2ACkrLAAD2DLkc2qw212.png

Java 中的 Runable 状态对应操作系统线程状态中的两种状态,分别是 Running 和 Ready,也就是说,Java 中处于 Runnable 状态的线程有可能正在执行,也有可能没有正在执行,正在等待被分配 CPU 资源。