为什么会出现线程阻塞?

1.睡眠状态:当一个线程执行代码的时候调用了sleep方法后,线程处于睡眠状态,需要设置一个睡眠时间,此时有其他线程需要执行时就会造成线程阻塞,而且sleep方法被调用之后,线程不会释放锁对象,也就是说锁还在该线程手里,CPU执行权还在自己手里,等睡眠时间一过,该线程就会进入就绪状态,典型的“占着茅坑不拉屎”;

2.等待状态:当一个线程正在运行时,调用了wait方法,此时该线程需要交出CPU执行权,也就是将锁释放出去,交给另一个线程,该线程进入等待状态,但与睡眠状态不一样的是,进入等待状态的线程不需要设置睡眠时间,但是需要执行notify方法或者notifyall方法来对其唤醒,自己是不会主动醒来的,等被唤醒之后,该线程也会进入就绪状态,但是进入仅需状态的该线程手里是没有执行权的,也就是没有锁,而睡眠状态的线程一旦苏醒,进入就绪状态时是自己还拿着锁的。等待状态的线程苏醒后,就是典型的“物是人非,大权旁落“;

3.礼让状态:当一个线程正在运行时,调用了yield方法之后,该线程会将执行权礼让给同等级的线程或者比它高一级的线程优先执行,此时该线程有可能只执行了一部分而此时把执行权礼让给了其他线程,这个时候也会进入阻塞状态,但是该线程会随时可能又被分配到执行权,这就很”中国化的线程“了,比较讲究谦让;

4.自闭状态:当一个线程正在运行时,调用了一个join方法,此时该线程会进入阻塞状态,另一个线程会运行,直到运行结束后,原线程才会进入就绪状态。这个比较像是”走后门“,本来该先把你的事情解决完了再解决后边的人的事情,但是这时候有走后门的人,那就会停止给你解决,而优先把走后门的人事情解决了;

5.suspend() 和 resume() :这两个方法是配套使用的,suspend() 是让线程进入阻塞状态,它的解药就是resume(),没有resume()它自己是不会恢复的,由于这种比较容易出现死锁现象,所以jdk1.5之后就已经被废除了,这对就是相爱相杀的一对

转载链接:https://blog.csdn.net/sunshine_2211468152/article/details/87299708

【转载保存】什么是线程阻塞?为什么会出现线程阻塞?相关推荐

  1. JAVA那点破事!并发、IO模型、集合、线程池、死锁、非阻塞、AQS....

    关于Java面试,面试官一般喜欢问哪些问题? 本文对一些高频问题做了汇总,为了便于大家查找问题,了解全貌,整理个目录,我们可以快速全局了解关于 JAVA 接下来,我们逐条来看看每个问题及答案 JDK. ...

  2. java runnable wait_面试官:都说阻塞 I/O 模型将会使线程休眠,为什么 Java 线程状态却是 RUNNABLE?...

    摘要: 原创出处 https://studyidea.cn 「公众号:程序通事 」欢迎关注和转载,保留摘要,谢谢! 使用 Java 阻塞 I/O 模型读取数据,将会导致线程阻塞,线程将会进入休眠,从而 ...

  3. (转载)网络编程释疑之:同步,异步,阻塞,非阻塞

    一讲到网络编程的I/O模型,总会涉及到这几个概念.问了很多人,没几个能清晰地讲出他们之间的区别联系,甚至在网络上也有很多不同的观点,也不知是中国文字释义的博大精深,还是本来这几个概念就是绕人不倦.今天 ...

  4. JAVA那点破事,并发、IO模型、集合、线程池、死锁、非阻塞、AQS...

    JDK.JRE.JVM 三者有什么关系? 答案: JDK(全称 Java Development Kit),Java开发工具包,能独立创建.编译.运行程序. JDK = JRE + java开发工具( ...

  5. Linux非阻塞启动node,Node-单线程、事件驱动、非阻塞I/O

    Nodejs既然这么流行就肯定有它的博大精深之处,自然不是我这还没入门的小白可以掌握的,我就简单说一下目前自己的理解程度. 一.单线程.非阻塞I/O.事件驱动 这是nodejs的三个特点. 单线程 N ...

  6. linux socket write()函数阻塞卡住线程问题(线程无法结束)write()非阻塞代码

    文章目录 1.参考文章:C++网络通信中write和read的为什么会阻塞 [2.参考文章:网络编程(24)-- linux中write和read函数的阻塞试验](https://blog.csdn. ...

  7. 阻塞io阻塞io_Redis:RESP协议,阻塞IO 与非阻塞IO,Redis的线程模型

    1.Redis 阻塞IO 与非阻塞IO Java在JDK1.4 中引入了NIO ,但是也有很多人在使用阻塞IO,这两种IO有什么区别? 在阻塞模式下,如果你从数据流读取不到指定大小的数据量,IO就会阻 ...

  8. 并发编程-23J.U.C组件拓展之阻塞队列BlockingQueue 和 线程池

    文章目录 概述 阻塞队列的常用场景 阻塞队列的4种处理方式 JDK 7提供的7个阻塞队列 ArrayBlockingQueue LinkedBlockingQueue PriorityBlocking ...

  9. java让线程空转_Java锁:悲观/乐观/阻塞/自旋/公平锁/闭锁,锁消除CAS及synchronized的三种锁级别...

    JAVA LOCK 大全 [TOC] 一.广义分类:乐观锁/悲观锁 1.1 乐观锁的实现CAS (Compare and Swap) 乐观锁适合低并发的情况,在高并发的情况下由于自旋,性能甚至可能悲观 ...

  10. java阻塞超时_JAVA防线程阻塞(超时控制)

    2.[代码]TimeoutThread /** * java线程超时控制的实现 * * 超时控制一般使用阻塞时间比较长的操作上,有可能是和远程数据库的连接,也有可能是网络下载,在程序超时后, 往往需要 ...

最新文章

  1. 【点云重采样Resampling】Python-pcl 基于多项式平滑点云及法线估计的曲面重建
  2. CentOS重启启动Apache,VNC
  3. unity能连jsp吗_Unity3D与JSP TomCat服务器传递数据和文件( 一) 建立Java服务器
  4. 一文看懂集成学习(详解 bagging、boosting 以及他们的4点区别)
  5. linux命令之vmstat
  6. 互动直播的视频录制与合成—支持多人离线重入
  7. 两年,从月入4K到40K,从来不是努力工作,而是不断跳槽
  8. Android 性能优化工具 TraceView 简单使用
  9. SQL2005恢复只有mdf文件的数据库
  10. 平面设计是做什么的?平面设计工作内容有哪些?
  11. Markdown语法大全
  12. web前端html怎么求最大值和最小值,求js数组的最大值和最小值的四种方法
  13. vue3中keep-alive路由缓存
  14. 扫描电子显微镜基本构造
  15. 用迭代法求某数a的平方根
  16. Red Hat Linux 7.3 +VMWare 虚拟机安装实践
  17. mod函数在计算机中实例,excel MOD函数的使用方法实例 MOD函数的公式语法及使用方法实例...
  18. 服务器异地备份共享文件夹方法,mssql数据库异地备份的两种方法
  19. php 去掉图片背景透明背景图片,php 处理透明背景的图片时的问题
  20. 在 OneNote 2010中输入复杂的数学公式

热门文章

  1. php培训出生做微电影网站的,微电影分享网站织梦整站源码
  2. 计算机网络教室任课教师登记表,多媒体教室工作计划
  3. burpsuite小米手机抓包_使用burpsuite实现Android APP的HTTPS抓包
  4. sqlserver查看索引_SQL Server页中行物理存储
  5. mysql 触发器 运算符_mysql三元运算,上下连表,视图,触发器,存储过程,事务等不常用方法...
  6. ajax实现一个前台的进度条,前台ajax实现上传文件并且有进度条
  7. Java9个异常处理的最佳实践
  8. 谈谈Java与大数据之间的关系你们都了解了清楚了吗?
  9. 脚本启动显示查询频繁被服务器防御_又被CC攻击弄得心有余悸?莫怕!这里教你如何防御...
  10. pip更换镜像源_Ubuntu20.04LTS更换软件源镜像