【java进阶】死锁

死锁是多线程环境中的一种状态,当两个或更多线程互相等待对方释放资源而造成的一种僵局。发生死锁的原因包括互斥、占有且等待、不可抢占和循环等待。为避免死锁,可以采取策略如一次性获取所有资源、允许资源抢占或设定资源申请顺序。这些方法有助于确保系统的稳定运行。
摘要由CSDN通过智能技术生成

在这里插入图片描述


  死锁是指一组互相竞争的线程因为互相等待导致“永久”阻塞的现象

发生死锁的原因

  • 互斥条件:共享资源 x 和 y 只能被一个线程占用;
  • 占有且等待:线程 t1 以及取得共享资源 x,在等待共享资源 y 的时候,不释放共享资源 x;
  • 不可抢占:其他线程不能强行抢占线程 t1 占有的资源;
  • 循环等待:线程t1等待线程t2占有的资源,线程t2等待线程t1占有的资源;

如何避免死锁

打破死锁发送的其中一个原因就可以:
第一个互斥条件不可以被打破,因为锁本身就是通过互斥来解决线程安全问题的;
打破占有且等待:我们可以一次性去获取所有需要的资源,这样就不存在等待了;
不可抢占:如果一个线程在拥有资源的情况下并去申请其他资源的时候,如果申请不到,就主动去释放当前所占有的资源;
循环等待:可以按照顺序申请资源来预防;指的是资源是有线性顺序的,申请的时候可以先申请资源序号小的,再申请资源序号大的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值