面试必问 | 一个线程从创建到消亡要经历哪些阶段?(面试高频 | 线程生命周期详解:从创建到终止的各个阶段)

原创
ithorizon 6个月前 (10-20) 阅读数 16 #后端开发

线程生命周期详解:从创建到终止的各个阶段

一、引言

在多线程编程中,了解线程的生命周期对于合理管理和控制线程至关重要。一个线程从创建到消亡会经历多个阶段,每个阶段都有其特定的状态和操作。本文将详细介绍线程的生命周期,包括从创建、运行到终止的各个阶段。

二、线程的创建阶段

线程的创建阶段是指线程从无到有的过程。在这个过程中,线程被分配内存空间,并初始化其状态。以下是线程创建的几个关键步骤:

  • 1. 分配内存空间:线程创建时,系统会为线程分配内存空间,用于存储线程的私有数据、程序计数器、寄存器等。
  • 2. 初始化线程状态:线程创建时,系统会初始化线程的状态,包括新建(NEW)状态。
  • 3. 设置线程属性:线程创建时,可以设置线程的优先级、是否为守护线程等属性。

public class ThreadExample extends Thread {

public ThreadExample(String name) {

super(name);

}

@Override

public void run() {

System.out.println("线程:" + getName() + "正在执行...");

}

public static void main(String[] args) {

ThreadExample thread = new ThreadExample("Thread-1");

thread.start();

}

}

三、线程的运行阶段

线程的运行阶段是指线程从就绪(RUNNABLE)状态到执行(RUNNING)状态的过程。在这个阶段,线程会参与CPU的调度,执行其指定的任务。以下是线程运行阶段的几个关键步骤:

  • 1. 就绪状态(RUNNABLE):线程创建后,会进入就绪状态。处于就绪状态的线程已经准备好执行,但尚未获得CPU的执行权。
  • 2. 执行状态(RUNNING):线程获得CPU的执行权后,会进入执行状态。在执行状态,线程会执行其run()方法中的代码。
  • 3. 状态转换:线程在运行过程中,或许会由于以下原因从执行状态转换到就绪状态:

    • 线程执行完毕。
    • 线程调用yield()方法,让出CPU执行权。
    • 线程因等待某些资源而阻塞。
    • 线程因出现异常而终止。

四、线程的阻塞阶段

线程的阻塞阶段是指线程因等待某些资源或条件而无法继续执行的过程。以下是线程阻塞阶段的几种常见情况:

  • 1. 等待锁:线程尝试获取某个对象的锁,但该锁已被其他线程持有,致使线程进入阻塞状态。
  • 2. 等待通知:线程调用Object的wait()方法,等待其他线程调用notify()或notifyAll()方法通知它。
  • 3. 等待I/O操作:线程执行I/O操作时,因I/O设备未准备好而进入阻塞状态。

public class ThreadExample {

public static void main(String[] args) {

Object lock = new Object();

Thread thread1 = new Thread(() -> {

synchronized (lock) {

try {

lock.wait();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

});

Thread thread2 = new Thread(() -> {

synchronized (lock) {

lock.notify();

}

});

thread1.start();

thread2.start();

}

}

五、线程的终止阶段

线程的终止阶段是指线程从终止(TERMINATED)状态到消亡的过程。以下是线程终止阶段的几个关键步骤:

  • 1. 终止状态(TERMINATED):线程执行完毕或因异常终止,进入终止状态。处于终止状态的线程不再参与CPU的调度。
  • 2. 清理资源:线程终止后,系统会清理线程占用的资源,包括释放锁、撤销线程句柄等。
  • 3. 线程消亡:线程终止并释放资源后,线程对象变为垃圾回收对象,等待垃圾回收器回收。

六、线程的生命周期图解

下面是线程生命周期的图解,帮助更好地领会线程从创建到消亡的过程:

新建(NEW)→ 就绪(RUNNABLE)→ 执行(RUNNING)→ 阻塞(BLOCKED)→ 终止(TERMINATED)

七、总结

了解线程的生命周期对于合理管理和控制线程至关重要。通过掌握线程的创建、运行、阻塞和终止等阶段,我们可以更好地优化程序性能,减成本时间程序的并发性和稳定性。在实际开发中,我们应该采取具体需求选择合适的线程生命周期管理策略,以确保程序的正常运行。


本文由IT视界版权所有,禁止未经同意的情况下转发

文章标签: 后端开发


热门