您当前的位置: 首页 >  Java

java持续实践

暂无认证

  • 1浏览

    0关注

    746博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Java多线程 死锁发生的四个必要条件

java持续实践 发布时间:2020-09-09 08:14:09 ,浏览量:1

文章目录
      • 死锁发生的四个必要条件
      • 死锁案例解读

死锁发生的四个必要条件
  1. 互斥条件:一个资源同时只能被一个线程所使用.
  2. 请求与保持条件: 例如请求第二把锁的时候, 保持自身的第一把锁不去释放.
  3. 不剥夺条件: 进程已获得的资源(例如已经获得的锁),没有外界的力量来去剥夺这把锁.
  4. 循环等待条件: 两个线程时, 是你等我释放锁, 我等你释放锁. 多个线程时, 是头尾相接的等待. 例如下图

以上的四个条件,为死锁发生的必要条件, 即必须同时满足这四种情况, 才会发生死锁.

死锁案例解读

例如此文的例子中. https://javaweixin6.blog.csdn.net/article/details/108460550 第一个条件, 互斥条件. 如下为互斥条件. static变量在程序运行中,只有一个. synchronized中的锁o1和o2只能被一个线程所持有. 第二点请求与保持条件 , 线程1保持锁o1,请求锁o2. 线程2 保持锁o2 , 请求锁o1.并且synchronized的特点就是没有获取到锁的时候, 也不会去释放锁. 第三点 不剥夺条件.在相互等待对方的锁资源 时候, 不会有额外的力量去剥夺某一方的锁, 只会让他们继续等待下去. 第四点 循环等待条件. 两个线程的时候, 线程1与线程2相互等待. 多个线程的时候, 形成环路的等待.

只要破解了其中一个条件, 死锁就不会发生了.

关注
打赏
1658054974
查看更多评论
立即登录/注册

微信扫码登录

0.0412s