Java并发中的死锁四大条件与避免策略
- 1、死锁是啥?
- 2、死锁的四大条件
- 3、避免死锁的策略
💖The Begin💖点点关注,收藏不迷路💖
|
1、死锁是啥?
死锁就像是几个朋友在聚会时,每个人都想和别人手里的东西交换,但又都不肯先放下自己手里的物品。比如:
- 小明有苹果,想要小华的香蕉。
- 小华有香蕉,但想要小红的橘子。
- 小红有橘子,却想要小明的苹果。
他们就这样互相等着对方先给,但谁都不愿意先放下自己手里的水果,结果就僵在那里了,谁都没法继续玩下去。这就是死锁!
2、死锁的四大条件
互斥条件:每个资源都是独一无二的,资源一次只能被一个进程使用。(互不相让)
请求与保持:进程在持有部分资源的同时,还请求其他资源,且不愿释放已持有的资源(贪心不足)。
不剥夺条件:进程已获得的资源,在未使用完之前,资源只能自愿释放,不能被强制剥夺。(固执己见)
循环等待:进程间形成资源请求的循环链,等待资源的关系。 (循环等待)
3、避免死锁的策略
-
一次性申请:进程在开始前一次性申请所有所需资源。
- 类似于聚会前,大家先列好清单,然后统一交换。
-
资源排序:按固定顺序申请资源,避免循环等待。
- 比如,规定按进程ID的升序来请求资源,避免循环等待。
-
释放资源:在请求新资源前,释放不必要的资源。
- 类似于聚会中,如果觉得某个水果等太久了,可以先放下,去尝试交换其他物品。
💖The End💖点点关注,收藏不迷路💖
|