java线程的生命周期

Java线程的生命周期分为五个主要阶段:新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)、死亡(Terminated)。每个阶段都有其特定的含义和状态转换条件,下面详细介绍每个阶段:

  1. 新建(New)

    • 定义:线程被创建但尚未开始执行。可以通过创建 Thread 类的实例来进入此状态。
    • 代码示例
      
      

      java

      复制代码

      Thread thread = new Thread(() -> System.out.println("Thread is running"));

    • 特点:此时线程已经在程序中存在,但还未调用 start() 方法开始执行任务。
  2. 就绪(Runnable)

    • 定义:调用 start() 方法后,线程进入就绪状态,等待CPU调度执行。
    • 代码示例
      
      

      java

      复制代码

      thread.start(); // 线程进入就绪状态

    • 特点:在就绪状态中,线程已经具备执行条件,等待操作系统的调度。此时,线程可能随时进入运行状态,但并没有立即获得CPU的执行权。
  3. 运行(Running)

    • 定义:一旦线程获得CPU时间片,开始执行其 run() 方法的代码,即进入运行状态。
    • 特点:此时线程真正执行任务中的代码。线程的生命周期主要体现在运行阶段,因为执行代码的进展会根据逻辑控制可能会导致状态转换,比如进入阻塞、死亡等状态。
    • 注意:线程的运行时间取决于操作系统的调度,不受程序控制。可能会因为CPU时间片用完而被暂停,让其他线程运行。
  4. 阻塞(Blocked)

    • 定义:线程因等待资源(如等待I/O、锁等)而暂时停止执行的状态。
    • 代码示例
      
      

      java

      复制代码

      synchronized (lock) { // 这里线程获得了锁 }

    • 特点:在阻塞状态下,线程不占用CPU资源,等待满足条件才能进入就绪状态。阻塞状态的原因可能有以下几种:
      • 等待阻塞:调用 wait() 方法使线程等待条件,直到 notify()notifyAll() 方法唤醒它。
      • 同步阻塞:线程尝试获取同步锁时,如果锁已被其他线程占用,则进入阻塞状态。
      • 其他阻塞:如调用 sleep() 方法或等待IO等。
  5. 死亡(Terminated)

    • 定义:线程的生命周期结束,进入死亡状态。
    • 死亡原因
      • run() 方法正常执行完毕,线程自然死亡。
      • 执行过程中抛出未捕获的异常导致线程意外终止。
    • 特点:一旦线程进入死亡状态,就无法重新启动。

状态转换总结

  • New -> Runnable:线程通过调用 start() 方法进入就绪状态。
  • Runnable -> Running:线程被CPU调度并开始执行。
  • Running -> Blocked:线程遇到等待的资源时进入阻塞状态。
  • Blocked -> Runnable:等待的资源满足条件或阻塞解除,线程重新回到就绪状态。
  • Running -> Terminated:线程执行完毕或因异常终止,生命周期结束。

这种状态控制有助于优化系统的资源调度,使得多线程在Java中能够合理、高效地执行不同任务。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值