首页 > 编程笔记 > Java笔记 阅读:1

Java线程的生命周期(图文并茂)

Java 语言使用 Thread 类及其子类的对象来表示线程,在它的一个完整生命周期中通常要经历以下五种状态,分别是新建、就绪、运行、阻塞和死亡。

CPU 需要在多条线程之间切换,相应地,线程的状态也会多次在运行、阻塞、就绪之间切换,如下图所示:


图 1 线程生命周期1

下表对线程状态进行了详细阐述。

表:线程状态
线程状态名称 线程状态说明
新建(NEW) 线程刚被创建,但并未启动,还没有调用 start 方法
可运行(RUNNABLE) 这里并未对就绪状态与运行状态进行明确区分。原因在于,针对 Java 对象来说,它们仅能被标记为可运行状态,至于何时真正执行,并非由 JVM 直接控制,而是由操作系统负责调度的。此过程极为短暂,故而在 Java 对象的状态划分上,难以对这两种状态做出明确界定
死亡(TERMINATED) 表明此线程已经结束生命周期,终止运行
阻塞(BLOCKED) 在 API 的说明中,这种状态被定义为:线程正处于阻塞阶段,等待获取一个同步锁(锁对象)。只有成功获取锁对象,它才会获得执行的机会
计时等待(TIMED_WAITING) 一个正在限时等待另一个线程执行一个(唤醒)动作的线程处于这一状态
无限等待(WAITING) 一个正在无限期等待另一个线程执行一个特别的(唤醒)动作的线程处于这一状态

注意,当从 WAITING 或 TIMED_WAITING 状态恢复到 RUNNABLE 状态时,如果发现当前线程没有得到同步锁,线程就会立刻转入 BLOCKED 状态,如下图所示。


图 2 线程生命周期2

相关文章