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

Java线程生命周期的5种状态(新手必看)

当线程对象被创建时,线程的生命周期就已经开始了,直到线程对象被撤销为止。

在整个生命周期中,线程并不是创建后即进入可运行状态,线程启动之后,也不是一直处于可运行状态。在整个生命周期中线程有多种状态,这些状态之间可以互相转化。

Java 线程的生命周期可以分为 5 种状态,分别是创建状态、就绪状态、运行状态、阻塞状态和终止状态。一个线程创建之后,总是处于其生命周期的 5 种状态之一。

线程的状态表明此线程当前正在进行的活动,而线程的状态是可以通过程序进行控制的,即可以对线程进行操作来改变状态。

线程状态间的转换关系如下图所示:


图 1 线程状态转换图

1) 创建状态

使用 new 运算符调用 Thread 类或其子类的构造方法创建一个线程对象后,该线程对象就处于创建状态。

2) 就绪状态

当线程对象调用了 start() 方法之后,就进入就绪状态。就绪状态的线程处于就绪队列中,要等待 JVM 的调度。

3) 运行状态

如果就绪状态的线程获取了 CPU 资源,就可以执行 run(),此时线程便处于运行状态。处于运行状态的线程最为复杂,它可以变为阻塞状态、就绪状态和死亡状态。

4) 阻塞状态

如果一个线程执行了 sleep(睡眠)、suspend(挂起)等方法,失去所占用资源之后,该线程就从运行状态进入阻塞状态。在睡眠时间已到或获得设备资源后可以重新进入就绪状态。

阻塞状态可以分为三种:

5) 终止状态

一个运行状态的线程完成任务或者其他终止条件发生时,该线程就切换到终止状态。

下面这几种情况都会导致线程切换到终止状态:

相关文章