什么是死锁?如何避免死锁?

概念

线程死锁描述的是这样一种情况:多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞,因此程序不可能正常终止。

我和同学都打扫卫生,我拿着扫帚等他的簸箕,他拿着簸箕等我的扫帚

产生条件

  1. 互斥条件:同一时刻一线程只能占用一个资源。

    同一时刻,我拿着扫帚,他拿着簸箕。

  2. 请求与保持:一个线程因请求资源而阻塞时,对已获得的资源保持不放。

    我在等他的簸箕,但我不会让出我的扫帚

  3. 不可剥夺:已获得的资源在为使用完时,其他线程不能强行剥夺。

    我拿着扫帚,但是我不能去强抢他拿的簸箕

  4. 循环等待

    我拿着扫帚等他的簸箕,他拿着簸箕等我的扫帚,形成闭环

如何避免

打破产生条件即可

  1. 破坏 互斥条件:无法被破坏,因为锁就是通过互斥来解决线程安全问题
  2. 破坏 请求与保持条件:一次申请所有需要的资源
  3. 破坏 不可剥夺条件:如果线程已占用部分资源,且他还要申请其他资源,如果申请不到,就主动释放它自己占有的资源
  4. 破坏 循环等待条件:按照顺序申请资源,释放资源则逆序

参考:JavaGuide

Original: https://www.cnblogs.com/daydreamer-fs/p/16739190.html
Author: fogey
Title: 什么是死锁?如何避免死锁?

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/715071/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • RAID磁盘阵列技术

    RAID磁盘阵列技术 1、RAID概述 RAID(Redundant Array of Independent Disk),从字面意思讲的是基于独立磁盘的具有冗余的磁盘阵列,其核心…

    技术杂谈 2023年6月21日
    0100
  • 描述高频题之队列&栈

    栈和队列 全文概览 基础知识 栈 栈是一种先进后出的数据结构。这里有一个非常典型的例子,就是堆叠盘子。我们在放盘子的时候,只能从下往上一个一个的放;在取的时候,只能从上往下一个一个…

    技术杂谈 2023年7月25日
    0110
  • macbook 入门

    前面的话 第一次使用 Mac 之前,需要改变一些原有思维,不应该使用 Windows 的思维习惯去使用 Mac,Mac 会节省系统维护、清理杀毒、升级驱动等操作的时间,让我们可以专…

    技术杂谈 2023年5月30日
    094
  • 如何使能uboot的debug开关?

    答: 直接在 Original: https://www.cnblogs.com/dakewei/p/14010217.htmlAuthor: JelloTitle: 如何使能ub…

    技术杂谈 2023年5月31日
    0146
  • 【转载】谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词

    谈谈Unicode 编码,简要解释UCS 、UTF 、BMP 、BOM 等名词 这是一篇程序员写给程序员的趣味读物。所谓趣味是指可以比较轻松地了解一些原来不清楚的概念,增进知识,类…

    技术杂谈 2023年7月24日
    086
  • 接口偶尔超时,竟又是JVM停顿的锅!

    原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处。 简介 继上次我们JVM停顿十几秒的问题解决后,我们系统终于稳定了,再也不会无故重启了!这是之前的文章…

    技术杂谈 2023年7月25日
    0117
  • centos找不到环境变量 -bash: ls: command not found

    在系统中输入命令,报如下错误: [root@a1 work]# ll-bash: ls: command not found 临时解决办法: export PATH=/usr/lo…

    技术杂谈 2023年5月31日
    0114
  • Python/Go/Java算法常用模板、数据结构

    记录一些个人在刷leetcode和CF中用的比较多的语法 初始化数组 Golang go语言中定义二维数组和初始化比较特殊,需要先初始化行数再初始化列,定义一个mxn数组:: ma…

    技术杂谈 2023年7月24日
    087
  • WIN10平板 如何设置不允许切换竖屏

    点击右下角的通知,然后点击旋转锁定,即可禁止自动竖屏切换 本文为博主原创文章,未经博主允许不得转载。 Original: https://www.cnblogs.com/aceta…

    技术杂谈 2023年5月31日
    0139
  • ToStringBuilder如何忽略null和空字符串

    日常开发中,经常用org.apache.commons.lang3.builder.ToStringBuilder工具类来记录日志,比如: 输出如下: 从结果上看: 行1:也就是O…

    技术杂谈 2023年5月31日
    0114
  • 哪有什么引用传递,所有都是值传递

    经常看到有人说什么值传递、引用传递,其实都是值传递,区别不过是传的值的类型罢了。 传值方式 java传值有且只有一种方式,将参数的”值”复制后传入,这个&#…

    技术杂谈 2023年7月25日
    082
  • java se 高级基础

    接口 继承树 Collection接口 Map接口 Collection 接口 Collection接口:单列集合,用来存储一个一个的对象 List接口:extends Colle…

    技术杂谈 2023年6月21日
    096
  • Zeebe架构图

    posted @2022-02-10 11:14 任国强 阅读(165 ) 评论() 编辑 Original: https://www.cnblogs.com/rgqancy/p/…

    技术杂谈 2023年6月1日
    0110
  • 暗时间

    这本书买来3年了以后才真正拿出来看,说来实在惭愧。 也是自己在看完《开放的智力》以后迫切想看的,因为《开放的智力》当中多次提到刘未鹏的《暗时间》。 我读本科那会,就知道这个牛人,后…

    技术杂谈 2023年5月31日
    0104
  • 部署-jenkins与gitlab结合使用

    jenkinis配置 在之前的博文中,博主已经搭建好了gitlab和jenkins环境。接下来,博主就要进行gitlab和jenkins的联合使用。 源码仓库配置 这里,我们需要配…

    技术杂谈 2023年7月23日
    090
  • 离散化

    3 -1 2 -2 这个数列有 5个逆序对 4 2 3 1 也是五个 我们把最小的-2视作1 第二的-1看做2 … 法一(推荐): 结构体保存数组num 和它在原数组里…

    技术杂谈 2023年6月21日
    0125
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球