目录

  • 一.死锁的例子
  • 二.死锁产生的必要因素
  • 三.如何处理死锁
    • 3.1 鸵鸟策略(就是不管他)
    • 3.2 检测死锁
    • 3.3 死锁恢复
    • 3.4 死锁的预防
    • 3.5 死锁的避免

一.死锁的例子

public class Solution {public static void main(String[] args) {StringBuffer s1 = new StringBuffer();StringBuffer s2 = new StringBuffer();new Thread() {public void run() {synchronized(s1) {s1.append("gzh");s2.append("wh");try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}synchronized(s2) {s1.append("4869");s2.append("0425");System.out.println(s1);System.out.println(s2);}}}}.start();new Thread() {public void run() {synchronized(s2) {s2.append("s2--------------");s1.append("s1--------------");try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}synchronized(s1) {s1.append("xiancheng99999");s2.append("ssssssssssssssss");System.out.println(s1);System.out.println(s2);}}}}.start(); }
}

二.死锁产生的必要因素

  1. 互斥条件:资源在某一时刻只能被一个线程(进程占用)
  2. 请求与保持条件:当前进程(线程)因为获取不到想要资源而阻塞,并且也不会释放自己已经拥有的资源。
  3. 不可剥夺条件:当前进程(线程)已经获得的资源在没有释放的时候,不能被其他进程(线程)强行剥夺。
  4. 循环等待: 存在一个进程等待队列{P1 , P2 , … , Pn},其中P1等待P2占有的资源,P2等待P3占有的资源,…,Pn等待P1占有的资源,形成一个进程等待环路。

三.如何处理死锁

3.1 鸵鸟策略(就是不管他)

  1. 因为处理死锁的代价很高
  2. 发生死锁的话对用户的影响不是很大
  3. 死锁发生的概率很低

3.2 检测死锁

  • 每种类型一个资源的死锁检测算法是通过检测有向图是否存在环来实现,从一个节点出发进行深度优先搜索,对访问过的节点进行标记,如果访问了已经标记的节点,就表示有向图存在环,也就是检测到死锁的发生。

3.3 死锁恢复

  • 利用抢占恢复
  • 利用回滚恢复
  • 通过杀死进程恢复

3.4 死锁的预防

  • 在程序运行之前避免死锁。

3.5 死锁的避免

  • 银行家算法
  • 为实现银行家算法,每一个进程进入系统时,他它须申明在运行过程中,可能需要每种资源类型的最大数目,其数目不能超过系统所拥有的资源总量。当进程请求一组资源时,系统必须首先确定是否有足够的资源分配给该进程。若有,再进一步计算在将这资源分配给进程后,是否会使系统处于不安全状态。如果不会,才将资源分配给它,否则让进程等待。

死锁---------相关推荐

  1. Python 多线程总结(2)— 线程锁、线程池、线程数量、互斥锁、死锁、线程同步

    主要介绍使用 threading 模块创建线程的 3 种方式,分别为: 创建 Thread 实例函数 创建 Thread 实例可调用的类对象 使用 Thread 派生子类的方式 多线程是提高效率的一种 ...

  2. 操作系统学习笔记 第三章:处理机调度与死锁(王道考研)

    本文章基于网课: 2019 王道考研 操作系统 考试复习推荐资料:操作系统复习总结 - 百度文库 (baidu.com) 需要相关电子书的可以关注我的公众号BaretH后台回复操作系统 第一章:操作系 ...

  3. 死锁产生的原因和解锁的方法

    产生死锁的四个必要条件: (1) 互斥条件:一个资源每次只能被一个进程使用. (2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放. (3) 不剥夺条件:进程已获得的资源,在末使 ...

  4. 【转】Maven Jetty 插件的问题(css/js等目录死锁)的解决

    Maven Jetty 插件的问题(css/js等目录死锁,不能自动刷新)的解决: 1. 打开下面的目录:C:\Users\用户名\.m2\repository\org\eclipse\jetty\j ...

  5. mysql 1061原因_MySQL死锁问题分析及解决方法实例详解(转)

    出处:http://www.jb51.net/article/51508.htm MySQL死锁问题是很多程序员在项目开发中常遇到的问题,现就MySQL死锁及解决方法详解如下: 1.MySQL常用存储 ...

  6. GIL+死锁与递归锁+信号量+event事件

    GIL全局解释器锁: GIL本质就是一把互斥锁,相当于执行权限,每个进程内都会存在一把GIL,同一进程内的多个线程 必须抢到GIL之后才能使用Cpython解释器来执行自己的代码,即同一进程下的多个线 ...

  7. Java线上问题排障:Linux内核bug引发JVM死锁导致线程假死

    Java本质上还是离不开操作系统,一来Java源码是用C/C++实现的,二来java进程还是需要依附于操作系统和硬件资源,有时候一些问题是操作系统级别导致的,下面的整个事件是源自一则真实的线上案例. ...

  8. bug诞生记——信号(signal)处理导致死锁

    这个bug源于项目中一个诡异的现象:代码层面没有明显的锁的问题,但是执行时发生了死锁一样的表现.我把业务逻辑简化为:父进程一直维持一个子进程.(转载请指明出于breaksoftware的csdn博客) ...

  9. 死锁问题分析的利器——valgrind的DRD和Helgrind

    在<DllMain中不当操作导致死锁问题的分析--死锁介绍>一文中,我们介绍了死锁产生的原因.一般来说,如果我们对线程同步技术掌握不牢,或者同步方案混乱,极容易导致死锁.本文我们将介绍如何 ...

  10. DllMain中不当操作导致死锁问题的分析——DllMain中要谨慎写代码(完结篇)

    之前几篇文章主要介绍和分析了为什么会在DllMain做出一些不当操作导致死锁的原因.本文将总结以前文章的结论,并介绍些DllMain中还有哪些操作会导致死锁等问题.(转载请指明出于breaksoftw ...

最新文章

  1. 实用的项目管理系统,才能让协同工作更顺畅
  2. 人工智能热门技术研究课题
  3. 【java】【mybatis】在使用mybatis进行批量插入,批量更新等批量操作时,切割In集合List进行分批批量操作的java中的切割代码...
  4. 焦旭超 201771010109《面向对象程序设计课程学习进度条》
  5. 调用带有 out 参数的方法时检查弃元参数
  6. 在看一个经典教材写的crontab时遇到的点小问题
  7. 使用WndProc来处理消息
  8. 014游移方位惯导系统力学编排公式推导
  9. 三星note升级android9,三星Note9官方台版安卓9固件rom升级更新包:BRI-N960FXXS3CSI5
  10. 在线 IDE,支持 C-sharp, PHP, JavaScript - CodeRun
  11. html实现艺术字体颜色,Word中将标题设置为艺术字,式样为艺术字库中的填充-红色,强调文字颜色2,粗糙棱台,...
  12. ubuntu redis desktop manager 编译问题解决
  13. java没有编译器吗_java有编译器吗
  14. 亿级万物互联新时代的物联网消息中间件EMQX调研
  15. VS断点无效,断点未能绑定
  16. VMware公司希望通过合作关系进一步提升业务态势
  17. 超大XML文件怎么打开
  18. Android地图应用闪退,android 第二次打开场景闪退
  19. Arduino 简易屏显电子温度计
  20. java中socket被拒绝_JavaMail API到iMail – java.net.SocketException:权限被拒绝:连接...

热门文章

  1. 《力荐收藏》Hadoop全套组件安装详解——带你走进大数据的深渊
  2. 【蒟蒻の笔记】圆方树初识
  3. 用“设计力量变革中国”:设计成就中国高峰论坛在沪举行
  4. 从代码角度理解什么是蜜罐
  5. CyberLink for Java 编程指南
  6. linux中关于用户交互式登陆
  7. 我和小美的撸码日记(3)之一句话搞定MVC表单页数据绑定与提交
  8. 安装django-rest-swagger报错 command: 'D:\Anaconda\python.exe' -u -c 'import sys, setuptools...的解决办法
  9. 【游记】北京-张北草原-锡林郭勒盟自驾4日游(更新中。。。)
  10. php智能客服,智能在线客服系统