java并发:关于死锁我的一些想法

来源:互联网 发布:电信4g网络 编辑:程序博客网 时间:2024/04/29 16:00

现在回到你的小学 ,那时你8岁上一年级, 正在为小明不借给你橡皮而不高兴。

故事是这样的:

你:小明借你橡皮给我用一下吧!小明:不借,你上次都没借给我,你借给我,我在借给你。你:等我有橡皮在借给你吧,你先借我用一下。小明:你要先借给我,我才借给你。你:你要先借给我,我才借给你。小明:你要先借给我,我才借给你。......

也许那时你还不知道编程中有一个和上面场景类似的概念叫作:‘死锁’

问题的关键在哪?
聪明的你已经发现了,你没橡皮,而小明说你要先借给他橡皮用。
有没有什么解决办法吗?
你们两个人要有一个人让步,或出现一个中间者。


1.首先考虑让步:

  • 你将橡皮借给小明,显然目前你没有没有办法借给他,解决方案:买一块借给他……
  • 小明将橡皮借给你

2.然后考虑中间者:

  • 小李看你正不高兴,了解之后将橡皮借给了你,你将橡皮借给了小明,然后小明将橡皮借给了你

显然上述不管哪种方式,都没有真正的解决问题, 而是退回到了你借橡皮的本身,但是有时候退后一步也许在另一个层面是一种进步。

总结:
‘死锁’是指两个人互掐谁也不让谁
如何避免‘死锁’:

  • 其中一人做出让步(打倒其中一个)
  • 避免两人见面
0 0