线程的生命周期

在这里插入图片描述
本文包含:

  1. 新建和就绪状态
  2. 运行和阻塞状态
  3. 线程死亡

1. 新建和就绪状态

当程序使用new 关键字创建了一个线程之后,该线程就处于新建状态,此时它和其它的Java 对象一样,仅仅由 Java 虚拟机为其分配内存,并初始化其成员变量的值。此时的线程对象没有表现出任何线程的动态特征,程序也不会执行线程的线程执行体。

当线程对象调用了 start() 方法之后,该线程就处于就绪状态,Java 虚拟机会为其创建方法调用栈和程序计数器,处于这个状态中的线程并没有开始运行,只是表示该线程可以运行了。至于什么时候运行取决于JVM 里线程调度器的调度。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意:只能对处于新建状态的线程调用 start() 方法,否则将引发 IllegalThreadStateException 异常
在这里插入图片描述

2. 运行和阻塞状态

如果处于就绪状态的线程获得了 CPU
当发生如下情况时,线程会进入阻塞状态。
在这里插入图片描述
当前正在执行的线程被阻塞之后,其他线程就可以获得执行的机会。被阻塞的线程会在合适的时候重新进入就绪状态,等待线程调度器再次调度她。

针对上述情况,当发生如下特定的情况时可以解除上面的阻塞,让该线程重写进入就绪状态。
在这里插入图片描述在这里插入图片描述
下图为线程状态转换图
在这里插入图片描述
线程从阻塞状态只能进入就绪状态,不能直接进入运行状态。

而就绪和处理状态之间的转换通常不受程序控制,而是由系统线程调度所决定,当处于就绪状态的线程获得了处理器资源时,该线程进入运行状态,当处于运行状态的线程失去了处理器资源时,该线程进入就绪状态。有一个方法例外:调用yield() 方法可以让运行状态的线程转入就绪状态

3. 线程死亡

线程会以如下三种方式结束,结束后就处于死亡状态。
在这里插入图片描述
注意:
在这里插入图片描述
对已经死亡的程序再次调用start() 方法来启动该线程。将引发 IllegalThreadStateException异常,这表明处于死亡状态的线程无法再次运行了。
程序只能对新建状态的线程调用 start() 方法,对新建状态的线程两次调用 start() 方法也是错误的。也会引起 IllegalThreadStateException异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值