Java并发中的死锁四大条件与避免策略

Java并发中的死锁四大条件与避免策略


💖The Begin💖点点关注,收藏不迷路💖

1、死锁是啥?

死锁就像是几个朋友在聚会时,每个人都想和别人手里的东西交换,但又都不肯先放下自己手里的物品。比如:

  • 小明有苹果,想要小华的香蕉。
  • 小华有香蕉,但想要小红的橘子。
  • 小红有橘子,却想要小明的苹果。

他们就这样互相等着对方先给,但谁都不愿意先放下自己手里的水果,结果就僵在那里了,谁都没法继续玩下去。这就是死锁!

2、死锁的四大条件

互斥条件:每个资源都是独一无二的,资源一次只能被一个进程使用。(互不相让

请求与保持:进程在持有部分资源的同时,还请求其他资源,且不愿释放已持有的资源(贪心不足)。

不剥夺条件:进程已获得的资源,在未使用完之前,资源只能自愿释放,不能被强制剥夺。(固执己见

循环等待:进程间形成资源请求的循环链,等待资源的关系。 (循环等待

3、避免死锁的策略

  • 一次性申请:进程在开始前一次性申请所有所需资源。

    • 类似于聚会前,大家先列好清单,然后统一交换。
  • 资源排序:按固定顺序申请资源,避免循环等待。

    • 比如,规定按进程ID的升序来请求资源,避免循环等待。
  • 释放资源:在请求新资源前,释放不必要的资源。

    • 类似于聚会中,如果觉得某个水果等太久了,可以先放下,去尝试交换其他物品。

在这里插入图片描述


💖The End💖点点关注,收藏不迷路💖
  • 44
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Seal^_^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值