Java多线程篇——线程的生命周期

线程的生命周期大体分为5个阶段:

1、NEW:在new状态下,该线程仅是一个线程对象,跟普通的Object对象没有区别,NEW状态下通过start方法进入RUNNABLE状态。

2、RUNNABLE:在调用start方法时候,JVM进程中会创建一个线程,但是该线程创建后不一定会立即运行,线程的运行与否都要通过CPU的调度,那么这个时候我们有个叫中间状态(RUNNALBE),也就是说该线程具备执行资格,处于待执行的状态。

3、RUNNING:当我们CPU通过轮询或者其他方法从任务可执行队列中选中了该线程,这时候线程才是真正的执行自己的代码,但是有一点需要注意的是:正在RUNNING状态下的线程事实上也是RUNNABLE的,但是在RUNNABLE状态下的线程不一定是RUNNING状态。
在RUNNING状态下可以转换成如下的状态:

  • 直接进入TERMINATED状态,例如调用stop方法。
  • 进入BLOCKED状态,比如调用sleep方法,或者调用wait方法加入到waitSet中。
  • 进行某个阻塞的IO操作,例如在网络数据的读写时候进入BLOCKED状态。
  • 获取某个锁资源,从而加入到该锁的阻塞队列中而进入了BLOCKED状态。
  • 由于CPU的调度器轮询使该线程放弃执行,进入RUNNABLE状态。
  • 线程主动调用yield方法,放弃CPU执行权,进入RUNNABLE状态。

4、BLOCKED:已知根据阻塞IO和获取资源锁时候我们进入了BLOCKED状态,那么接下来根据BLOCKED的状态又可以切换到如下的状态:

  • 直接进入TERMINATED状态,例如调用stop方法或者以外死亡(JVM Crash)。
  • 线程阻塞操作的结束,比如读取了想要的数据字节进入到RUNNABLE状态。
  • wait中的线程被其他线程notify/notifyall唤醒,进入RUNNABLE状态。
  • 现在在阻塞过程中被打断,比如其他线程调用了interrupt方法,进入RUNNABLE状态。

5、TERMINATED:该状态是一个线程的最终状态,在这个状态的线程将不会再切换到其他的状态,也就是说,进入了TERMINATED状态的线程就意味着该线程的整个生命周期都结束了,下面将列出进入哪些情况会使线程进入TERMINATED状态:

  • 线程运行正常结束,结束生命周期。
  • 线程运行出错导致以外结束。
  • JVM Crash导致所有线程都结束。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值