多线程-线程的生命周期

 线程的声明周期:

1. NEW

new 一个 Thread 对象时,如果没有调用 start 时,那么new的这个对象就相当于一个普通的java对象。

2. RUNNABLE

当调用 thread 的 start 时,才真正的在 jvm 进程中创建了一个线程,但是这个线程并不一定立即执行,需要等待 CPU 的调度。这个线程等待 CPU 调度的状态称为 RUNNABLE 状态。

3. RUNNING

一个正在执行自己业务逻辑的线程的状态称为 RUNNING 状态。该状态的线程可以发生如下的状态转换。

3.1 直接进入 TERMINATED 状态。比如调用 stop 方法。

3.2 进入 BLOCKED 状态。比如调用 sleep ,或者 wait 方法而加入 waitSet 中。

3.3 进行某个阻塞的 IO 操作,比如网络数据读写。

3.4 获取某个锁资源,从而加入该锁的阻塞队列中进入BLOCKED 状态。

3.5 由于 CPU 的调度轮询,使改线程放弃执行任务进入 RUNNABLE 状态。

3.6 线程主动调用 yield 方法,放弃 CPU 执行权,进入 RUNNABLE 状态。

4. BLOCKED

这个状态的线程可能进入到 TERMINATED 和 RUNNABLE状态。

如:

4.1 调用 stop 方法,进入TERMINATED 。

4.2 线程完成了指定的休眠时间,进入到了RUNNABLE。

4.3 wait中的线程被其它线程唤醒 notify/notifyall。进入到了RUNNABLE。

4.4 阻塞中的线程获取到了锁资源进入到了RUNNABLE。

4.5 线程在阻塞过程中被打断,比如其它线程调用了 interrupt  方法,进入RUNNABLE。

5. TERMINATED

这个状态是线程的最终状态,改状态的线程不会被切换到其它任何状态。

导致该状态的情况如下:

5.1 线程运行正常结束。

5.2 线程运行中意外出错。

5.3 JVM宕机,导致所有线程结束。

以上内容参考了java高并发变成详解一书。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

荆茗Scaler

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

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

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

打赏作者

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

抵扣说明:

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

余额充值