关于死锁的发生条件和解决死锁

死锁发生的四个必要条件
互斥条件:一个资源同时只能被一个线程所使用.请求与保持条件: 例如请求第二把锁的时候, 保持自身的第一把锁不去释放.不剥夺条件: 进程已获得的资源(例如已经获得的锁),没有外界的力量来去剥夺这把锁.循环等待条件: 两个线程时, 是你等我释放锁, 我等你释放锁. 多个线程时, 是头尾相接的等待.例如下图以上的四个条件,为死锁发生的必要条件, 即必须同时满足这四种情况, 才会发生死锁.死锁案例解读例如此文的例子中.https://javaweixin6.blog.csdn.net/article/details/108460550第一个条件, 互斥条件.如下为互斥条件. static变量在程序运行中,只有一个. synchronized中的锁o1和o2只能被一个线程所持有.第二点请求与保持条件 , 线程1保持锁o1,请求锁o2. 线程2 保持锁o2 , 请求锁o1.并且synchronized的特点就是没有获取到锁的时候, 也不会去释放锁.第三点 不剥夺条件.在相互等待对方的锁资源 时候, 不会有额外的力量去剥夺某一方的锁, 只会让他们继续等待下去.第四点 循环等待条件. 两个线程的时候, 线程1与线程2相互等待. 多个线程的时候, 形成环路的等待.只要破解了其中一个条件, 死锁就不会发生了.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值