Java中线程的生命周期

本文介绍了Java中线程的五个生命周期阶段:新建、就绪、运行、阻塞和死亡。当线程对象创建并start后,进入就绪状态,等待CPU分配执行;获取资源后进入运行状态;通过sleep、wait、join或I/O请求会进入不同类型的阻塞状态;当任务完成或遇到终止条件,线程进入死亡状态。
摘要由CSDN通过智能技术生成

线程的生命周期:线程是一个动态的执行过程,它也有从产生到 死亡的过程。

a) 新建状态:

使用 new 关键字和 Thread 类或其子类建立一个线程对象后,该线程 对象就处于新建状态。它保持这个状态直到程序 start()这个线程。

b) 就绪状态:

当线程对象调用了 start()方法之后,该线程就进入就绪状态,该状态 的线程位于可运行线程池中,变得可运行,等待获取 CPU 的使用权。 就绪状态的线程处于就绪队列中,要等待 JVM 里线程调度器的调度。

c) 运行状态:

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

d) 阻塞状态:

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

  1. 等待阻塞:运行状态中的线程执行 wait()方法,使线程进入到等 待阻塞状态。
  2. 同步阻塞:运行的线程在获取对象的同步锁时,若该同步锁被别 的线程占用,则 JVM 会把该线程放入锁池中。
  3. 其他阻塞:通过调用线程的 sleep()或 join()发出了 I/O 请求时, 线程就会进入到阻塞状态。当 sleep()状态超时,join()等待线程 终止或超时,或者 I/O 处理完毕,线程重新转入就绪状态。

e) 死亡状态:

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

public class Text extends Thread {
    public void run() {//当run方法被执行时,线程进入运行状态
        for (int i = 0; i < 101; i++) {
            String threadName = Thread.currentThread().getName();
            System.out.println(threadName + ":" + i);
        }
        //run方法全被执行完成后,线程进入死亡状态,释放当前线程对象
    }

    public static void main(String[] args) {
        //当产生一个线程类型的对象时,属于新建状态
        Text text = new Text();
        Text text1 = new Text();
        //当线程对象调用了start()方法时,线程进入就绪状态
        text.start();//已经准备就绪,只等待CPU执行
        text1.start();
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夙愿-妍

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值