当前位置:   article > 正文

死锁产生的条件及解决办法_死锁的产生条件,如何解决死锁

死锁的产生条件,如何解决死锁

死锁产生的条件及解决办法


前言

多线程编程中死锁是必须要了解的情况下面来看看产生的条件及解决办法


一、死锁产生的因素?

只要发生死锁,下面的因素必定会产生。

1 、互斥

例如 synchronized,就是互斥条件的锁。

2、占有并等待

例如线程1锁住了A,要抢占B等待B资源,这时候线程1就可以说是处于占有并等待的状态。

3、不可抢占

例如线程1锁住了A,然后要抢占B,这个时候B是不能强行抢占过来的,线程1就是不可抢占的状态。

4、循环等待

例如线程1锁住了A,要抢占B,线程2锁住了B要抢占A,这时候两个线程就处于循环等待的状态。

二、解决方案

  1. 针对第一个因素,可以使用原子类,例如AtomicInteger这种类型的线程安全类去计算或者其他方式绕开互斥即可。
  2. 针对第二个因素,我们可以直接获取2个资源再锁,把A、B放到一个资源类中,同时获取到了两个资源才算锁住了资源。把锁的范围扩大。
  3. 针对第三个因素,我们可以设置超时时间,例如ReentrantLock中设置超时时间,超时了就不再等待。
  4. 针对第四个因素,可以按顺序获取锁,无论是线程1还是线程2,都要先获取A的锁,然后获取B的锁,再去执行业务代码。这样就能解除死锁。

总结

以上就是对于死锁的产生原因及解决方案,不对的欢迎指出,共同进步。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/码创造者/article/detail/1021308
推荐阅读
相关标签
  

闽ICP备14008679号