Java死锁如何避免?

造成死锁的⼏个原因:

  1. ⼀个资源每次只能被⼀个线程使⽤

  2. ⼀个线程在阻塞等待某个资源时,不释放已占有资源

  3. ⼀个线程已经获得的资源,在未使⽤完之前,不能被强⾏剥夺

  4. 若⼲线程形成头尾相接的循环等待资源关系

  • 这是造成死锁必须要达到的4个条件,如果要避免死锁,只需要不满⾜其中某⼀个条件即可。
  • ⽽其中前3 个条件是作为锁要符合的条件
  • 所以要避免死锁就需要打破第4个条件,不出现循环等待锁的关系。

这样记忆没有意义,所以换一种记忆的方式,锁的特点

  1. 加锁的资源只能同时被一个线程使用 -> 多个线程不能使用同一个资源
  2. 加锁的资源所在线程就算阻塞,也不会释放锁 -> 不释放已占有资源
  3. 加锁的资源所在线程不能强行释放锁 -> 资源未使⽤完之前,不能被强⾏剥夺
  4. 多个锁嵌套使用,容易造成循环等待资源,产生死锁

在开发过程中:

  1. 要注意加锁顺序,保证每个线程按同样的顺序进⾏加锁

    • 加锁的顺利要一致,不要出现锁1嵌套锁2,锁2又嵌套锁1的情况
  2. 要注意加锁时限,可以针对所设置⼀个超时时间

    • Lock锁里面有一个tryLock的方法,可以设置一个超时时间,可以利用这个方法做一个获取锁时间上的限制

Java基础 -> Java死锁如何避免?相关推荐

  1. Java基础-Java中的堆内存和离堆内存机制

    Java基础-Java中的堆内存和离堆内存机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 转载于:https://www.cnblogs.com/yinzhengjie/p/9 ...

  2. Java基础-JAVA中常见的数据结构介绍

    Java基础-JAVA中常见的数据结构介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是数据结构 答:数据结构是指数据存储的组织方式.大致上分为线性表.栈(Stack) ...

  3. Java基础-Java中的内存分配与回收机制

    Java基础-Java中的内存分配与回收机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一. 二. 转载于:https://www.cnblogs.com/yinzhengji ...

  4. Java基础——Java多继承的三种实现方式

    Java基础--Java"多继承"的三种实现方式 Java语言本身只支持单继承(每个类只能有一个父类),但单继承的局限性很大,因此,可以通过以下的方式实现"多继承&quo ...

  5. [重学Java基础][Java IO流][Exter.2]IO流中几种不同的读写方法的区别

    [重学Java基础][Java IO流][Exter.2]IO流中几种不同的读写方法的区别 Read 读入方法 read(): 一般是这种形式 public int read() 1.从流数据中读取的 ...

  6. Java基础----Java编程语言概述

    Java基础----Java编程语言概述 文章目录 Java基础----Java编程语言概述 Java编程语言概述 1-1 软件开发介绍 1.1软件开发介绍 1.2 常用命令 1-2 计算机编程语言介 ...

  7. JAVA基础--JAVA SE(知识点总结 Ⅴ )

    前面内容请见: JAVA基础–JAVA SE(知识点总结 Ⅰ ) JAVA基础–JAVA SE(知识点总结 Ⅱ ) JAVA基础–JAVA SE(知识点总结 Ⅲ ) JAVA基础–JAVA SE(知识 ...

  8. Java基础-Java中常用的锁机制与使用

    Java基础-Java中常用的锁机制与使用 锁lock或互斥mutex是一种同步机制,主要用于在存在多线程的环境中强制对资源进行访问限制.锁的主要作用为强制实施互斥排他以及并发控制策略.锁一般需要硬件 ...

  9. java基础-java反射机制

    2019独角兽企业重金招聘Python工程师标准>>> 引述要学习Spring框架的技术内幕,必须事先掌握一些基本的Java知识,正所谓"登高必自卑,涉远必自迩" ...

  10. Java基础——Java IO详解

    一.概述 1.Java IO Java IO即Java 输入输出系统.不管我们编写何种应用,都难免和各种输入输出相关的媒介打交道,其实和媒介进行IO的过程是十分复杂的,这要考虑的因素特别多,比如我们要 ...

最新文章

  1. 诚聘英才,共创未来!华南农业大学农学院高层次人才招聘
  2. UIPageViewController教程
  3. UVA 1366 Martian Mining DP
  4. JQuery 中有用的方法
  5. 三角形一点到三边距离最小_高中数学:利用正弦定理、余弦定理求解三角形基础题...
  6. Taro+react开发(18)--定义变量值
  7. 实践单元测试(2) - 大话单元测试
  8. 唏嘘!一代国产手机巨头走向终点:官网已无法访问
  9. 数据科学即将迎来“无代码”时代
  10. 在rhel6 64位环境下部署LNMP环境
  11. 新手使用GitHub客户端提交本地项目到GitHub网站详细步骤
  12. 域名解析信息易语言代码
  13. 基于asp.net大学生助学贷款管理系统#毕业设计
  14. NetBeans修改字体中文乱码问题
  15. spider pi 智能视觉六足机器人 开箱介绍 0602
  16. 怎么查询计算机二级证书快递号,计算机二级office查询成绩后的注意事项证书直邮申请17到到23号...
  17. 图片不变形,按照等比例缩小或扩大显示
  18. Java哈希表及其应用
  19. 10月18号 蒟蒻的流水账
  20. 2020 蓝桥杯大学 B 组省赛模拟赛 七巧板

热门文章

  1. 将系统必备组件打包进安装文件(以vs15打包.net formwork 4.5为例)有点鸡肋
  2. projectManager
  3. pandas中关于DataFrame去掉重复行和NaN行
  4. 抖音账号主页设置推荐机制
  5. 【渝粤教育】 国家开放大学2020年春季 1459公共卫生伦理 参考试题
  6. 2022年Behance高清大图免费下载技术分享。WIN和MAC电脑通用,官方靠谱小工具。
  7. Ubuntu和Windows双系统服务器互相切换的简单方案
  8. 孤立词语音识别matlab,基于Matlab仿真的孤立词语音识别技术研究
  9. 《多媒体在初中数学中的运用研究》课题工作报告
  10. Ubuntu 蓝屏拯救