如何避免死锁呢?

40 篇文章 2 订阅

转自:

避免死锁

下文是笔者收集的避免死锁的方法,如下所示:

加锁顺序

多个线程时间需要使用相同顺序的锁,采用此种方式可避免死锁发生
如下所示:

Thread 1:
  lock A 
  lock B

Thread 2:
   wait for A
   lock C (when A locked)

Thread 3:
   wait for A
   wait for B
   wait for C

加锁时限

另一个避免死锁的方法:“ 就是为锁设置一个超时时间,当一个线程在指定时间内未获取到相应锁时,则会释放所有获取的锁 ”

死锁检测

死锁检测是可以更好的预防死锁机制
当一个线程获取锁,将线程和锁信息记录到一个Map中,当其它线程请求时,我们可以去map中检测以下是否存在锁信息
如:
线程A请求锁2,但是锁2这个时候被线程B持有,这时线程A就可以检查一下线程B是否已经请求了线程A当前所持有的锁
如果线程B确实有这样的请求,那么就是发生了死锁(线程A拥有锁1,请求锁2;线程B拥有锁2,请求锁1)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值