马士兵java架构师

您现在的位置是:java学习笔记 >

java学习笔记

[5个阶段] java线程的生命周期有几个阶段?

2024-03-13 16:16:23java学习笔记 本文浏览次数:1 百度已收录

本 文 目 录

java线程的生命周期有几个阶段

Java线程的生命周期及其阶段

在Java编程中,线程是程序执行流程中的基本单元,它负责执行特定任务。Java线程在其生命周期中有五个明确的阶段,每个阶段都对应着线程状态的变化。理解这些阶段对于有效地管理并发和多线程至关重要。

1. 新建(New)阶段

在创建线程对象时,线程进入新建阶段。通过实现Runnable接口或继承Thread类并实例化一个对象即可创建线程。例如:

Thread thread = new Thread(new Runnable() {
    @Override
    public void run() {
        // 线程执行的任务
    }
});

此时,线程并未开始执行,只是已经具备了执行的条件。

2. 就绪(Runnable)阶段

当调用线程对象的start()方法后,线程进入就绪状态,等待被JVM调度器选中。这意味着线程可以随时开始运行,但实际是否运行取决于操作系统的线程调度策略。

thread.start();

3. 运行(Running)阶段

若线程从就绪队列中被调度器选中,则该线程进入运行状态,开始执行其run()方法中的代码。同一时刻,可能有多个线程处于运行状态,也可能只有一个。

4. 阻塞(Blocked/Waiting/Timed Waiting)阶段

当线程在运行过程中遇到以下情况之一时,将进入阻塞状态:

  • 等待获取锁资源(Blocked)
  • 主动调用wait()sleep()等方法让出CPU(Waiting或Timed Waiting)
  • 等待某个条件满足(如join()方法)
synchronized (obj) {
    obj.wait(); // 进入等待状态
}

5. 终止(Terminated)阶段

线程执行完其run()方法或者提前调用了stop()(已废弃)、interrupt()方法后,线程将结束生命周期,进入终止状态。

// 不推荐使用stop()
// thread.stop();

// 建议使用interrupt()
thread.interrupt();

总结与注意事项:

  • Java线程的生命周期包括新建、就绪、运行、阻塞和终止五个阶段。
  • 理解每个阶段的意义有助于更好地管理和控制线程行为。
  • 注意避免滥用线程操作方法,比如Thread.stop()方法由于可能导致资源泄露等问题已经被弃用,推荐使用更安全的中断机制。
  • 在设计多线程程序时,需考虑线程间的同步和通信问题,合理利用锁、条件变量等机制。

完整代码示例(简化版):

public class ThreadLifeCycleDemo {
    public static void main(String[] args) throws InterruptedException {
        Thread thread = new Thread(() -> {
            System.out.println("Thread started");

            try {
                Thread.sleep(1000); // 让线程进入Timed Waiting状态
            } catch (InterruptedException e) {
                System.out.println("Thread interrupted");
            }

            System.out.println("Thread finished execution");
        });

        thread.start();

        // 等待一段时间后中断线程
        Thread.sleep(2000);
        thread.interrupt();
    }
}

上述代码演示了一个简单的Java线程生命周期变化过程,涵盖了新建、就绪、运行、阻塞和终止几个阶段。