线程的生死

23 篇文章 0 订阅

与人一样,线程的一生,不过是出生,活着,死去,活着才有那么多故事,求不得,等不到。

线程的状态:

  • New(新创建)
  • Runnable(可运行)
  • Blocked(被阻塞)
  • Waiting(等待)
  • Timed waiting(计时等待)
  • Terminated(被终止)

这里写图片描述

新创建线程

new Thread(),此线程还没有开始运行;

可运行线程

一旦调用 start 方法,线程将处于 runnable 状态,它实际上包含“可运行,没运行”和“可运行,正在运行”两个状态,因为 CPU 同一时刻只能运行一个线程,它不断切换运行多个可运行线程,这些线程就随着 CPU 的切换在这两种状态下不断转换。

被阻塞线程和等待线程

  • 当一个线程试图获取一个对象的内部锁,而该锁被其他线程拥有,则该线程进入阻塞状态。
  • 当线程等待其他线程通知一个条件时,它进入等待状态。
  • 有些方法在进入等待状态时,有一个超时参数,当它等待的时间超过设定参数,它就自动变成可运行状态,也就是说计时等待状态就是一个特殊的等待状态。

等待与阻塞的区别:
等待的线程被激活后,当重新获得锁时,会直接跳到上次等待的地方继续执行。

如图:

这里写图片描述

上图中白色的框,即锁对象内部,一个线程内可能拥有多个锁对象,上图三个可运行的线程可能是同一个线程,相应的锁对象运行完毕后,可能会通知此锁对象内的等待线程,等待线程被唤醒后重新进入阻塞队列,但这时它们已经不是普通的阻塞队列,当它们再次进入锁对象时会直接跳到上次等待的地方,继续判断,继续执行。

被终止的线程

线程死亡原因:

  • run 方法完成,自然死亡。
  • 因为一个没有捕获的异常而意外死亡。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值