黑马程序员技术交流社区

标题: 不知道哪位大神可以用简单的语言描述一下死锁?谢谢 [打印本页]

作者: 笑轻轻    时间: 2014-8-11 19:59
标题: 不知道哪位大神可以用简单的语言描述一下死锁?谢谢
看了死锁,感觉似懂非懂。要是用一句简单的概念描述一下就好了

作者: ☆枫の云    时间: 2014-8-11 20:49
我的理解就是同步锁里还有同步锁,然后线程1拿到A锁又要去拿B锁,线程2拿到B锁又要去拿A锁,如果都不释放手里的锁,那么就会产生死锁。
作者: rolling-stone    时间: 2014-8-11 22:40
当一个锁占有现在的资源,并且要求下一个资源的时候。下一个资源却被别的锁所占据,这个时候就产生死锁。
作者: 席杰    时间: 2014-8-11 22:48
形象的来个比喻,去银行钱库有两个通道,第一个通道分别依次通过A门、B门,另外一个通道分别依次通过B门、A门,这时银行派工作人员甲拿着A门锁走一通道,工作人员乙拿着B门锁去第二个通道,而当俩人分别通过第一门后,而相方又互相不换锁,就出现了谁也进不去取不出钱。
作者: J.twt    时间: 2014-8-11 22:56
举个简单的例子,假如现在有两个人非常饥饿了,非常的想要吃饭,你知道,通常我们吃饭需要用筷子和饭碗,问题来了,假设这里只有一双筷子和一个饭碗,你们两人一人得到了一样(假设一人得到了筷子,而另一人得到了饭碗),但是你们现在非常的想吃饭,但是想吃饭必须筷子和饭碗都具备,于是你们互相要求对方把相应的道具给自己,但是都由于都非常想吃饭,为了能够尽快的吃到饭,所以都不想给筷子或者饭碗给对方,所以就这样僵持不下,到最后两个人都没有吃到饭,所以最后就饿死了(哈哈。。。)
上述中两个人便是两个进程,或者线程,筷子和饭碗就相当于CPU资源,死锁的意思就是说两个进程彼此都有彼此需要的资源,但是都不释放自己所拥有的资源,导致两个进程得不到执行,僵持下去,形成死锁
作者: 画了一个圈儿    时间: 2014-8-12 00:43
楼主不要急, synchronized的应用比较抽象,建议先把死锁的代码敲熟练。学习到第12天的教程,JDK.5升级版,看过java.util.concurrent.locks 包里的lock()、unlock()方法后,再重新回来看死锁的问题,就容易理解多了。
作者: 单线程xia    时间: 2014-8-12 00:45
两者都占用着资源,又都需要对方的资源 才能进行下一步。
作者: 李文方    时间: 2014-8-12 08:17
双方都需要对方的锁,可是双方又都不放自己的锁,就这么一直僵持着,程序无法再向下执行
作者: 明2012    时间: 2014-8-12 08:27
各位大神 学习了
作者: xbz1986    时间: 2014-8-12 09:05
目前看不懂  学习一下!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2