Java死锁

  • 死锁是指在多线程情况下,两个或两个以上线程在执行过程中,因争夺独占资源而出现的互相等待的现象。
  • 产生死锁的必要条件
    1)互斥条件:指线程间竞争的资源具有独占性,一旦被某个线程获取,则其他线程只能等待
    2)持有并保持:指一个线程获取到了至少一个线程,又要获取其他资源,而该资源正被其他线程持有,此时这个线程只能阻塞,同时又不释放自己已持有的资源。
    3)不可剥夺:指线程获取到的资源在使用完之前不可以被其他线程抢走,只能由该线程释放。
    4)循环等待:指发生死锁时,必然存在一条环形等待链,即多个线程T0,T1,T2…Tn,T0等待T1释放资源,T1等待T2释放资源…Tn等待T0释放资源。
  • 避免死锁
    只需要破坏产生死锁的四个必要条件之一即可,但是实际上只能破坏请求与保持、循环等待两个条件
    1)资源有序性
    资源有序性是指,线程A和线程B都需要资源1,2,3,4…n,在线程执行过程中,只有获取到了资源n-1,才能再去获取资源n,例如线程A获取到了1,并想要获取2,在只有A和B两个线程的情况,A一定可以得到,因为B没有持有1也就不会持有2,这样就避免了死锁的方法。
    资源有序性破坏了线程的持有并保持与循环等待条件。
    2)超时加锁
    为线程获取锁指定一个超时时间,在超过这个时间后,线程放弃对锁的获取同时释放已获取到的资源,这样可以让其他线程得到这些资源并能够执行完毕,该线程在等待一段时间后重试。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值