一看就懂的线程状态

线程6大状态(个人理解)

  1. NEW(新建状态):新建一个线程
  2. RUNNABLE(可运行态):获得了锁,获得了时间片,正在运行。
  3. BLOCKED(阻塞状态):未获得锁,在此等候获得锁。
  4. WAITING(无限等待状态):wait()没有被主动唤醒,t.join() 线程t没有运行完毕。
  5. TIMED_WAITING(有限等待状态):wait(时间)、sleep(时间)、t.join(时间),当时间还没结束。
  6. TERMINATED(终止状态):线程结束

状态图解析

在这里插入图片描述

  1. 图中左下角的6大状态是API文档中介绍的,比较官方。
  2. 我画得图中多了一个不存在Running状态,是为了好理解
  3. wait()方法执行时,会释放锁资源,导致其被唤醒后或时间到期后,直接进入阻塞状态,去请求锁资源。
  4. sleep()和join()执行时,不会释放锁资源,所以方法结束后,直接进入runnable状态。

状态图简单版

在这里插入图片描述

状态图简单版摘自https://my.oschina.net/ericquan8/blog/384655

Join方法简介

  1. 线程合并:将两个交替执行的线程合并为顺序执行的线程,即让异步执行的线程变成同步执行的线程
  2. t.join():方法阻塞调用此方法的线程,直到线程t完成,此线程再继续
  3. t.join(1000):等待 t 线程,等待时间是1000毫秒

wait、sleep和yield方法的区别

  • wait:
  1. 定义在Object类中,是一个实例方法
  2. 只能在同步(synchronize)环境中被调用,可被notify和notyfyAll线程唤醒
  3. 等待时会释放锁,唤醒后进入阻塞状态
  4. 被用于线程间通信
  5. wait、notify、notifyAll无需捕获异常
  • sleep:
  1. 定义在Thread类中,是一个静态方法
  2. 等待时持有锁,可设置睡眠时间,唤醒后进入就绪状态
  3. 被用于短时间暂停当前线程
  4. 必须捕获异常
  • yield(礼让线程):
  1. 定义在Thread类中
  2. 调用时让出cpu执行权,让有同样优先级(大于等于)的正在等待的线程有机会执行。
  3. 谁能获得CPU资源取决于调度器,yield方法是不可靠的,它只能尽力而为
  • PS:
  1. 状态图详细版,来自本人参考许多资料后,花了几个小时自己手工画的,觉得有帮助的朋友们请点个赞,程序员画图画的想哭!(想追求完美)
  2. 文章来自各种资源的整理,如有侵权请告知删除。
  3. 转载本文请注明出处

(想自学习编程的小伙伴请搜索圈T社区,更多行业相关资讯更有行业相关免费视频教程。完全免费哦!)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值