黑马程序员技术交流社区

标题: 如何理解死锁? [打印本页]

作者: 老梁    时间: 2014-6-12 19:22
标题: 如何理解死锁?
最近看到Java的多线程部分,对于死锁不是很理解,各位能说说对死锁的理解吗?
作者: liujie445012100    时间: 2014-6-12 20:43
A拥有B的锁,B拥有A的锁,这个时候容易产生死锁,你同步嵌套一下同步,但是锁的对象不同,楼主你试试看,如果没有出现死锁,加个while就行
作者: alive    时间: 2014-6-12 22:23
两个方法有两把钥匙,但是他们要执行线程都需要自己和对方的钥匙,当两个人各自拿了一个都愿意给对方的时候,就形成了死锁
作者: 老梁    时间: 2014-6-13 08:46
liujie445012100 发表于 2014-6-12 20:43
A拥有B的锁,B拥有A的锁,这个时候容易产生死锁,你同步嵌套一下同步,但是锁的对象不同,楼主你试试看,如 ...

好的,谢谢
作者: 老梁    时间: 2014-6-13 08:52
alive 发表于 2014-6-12 22:23
两个方法有两把钥匙,但是他们要执行线程都需要自己和对方的钥匙,当两个人各自拿了一个都愿意给对方的时候 ...

两个人各自拿了一把钥匙,在都不愿意给对方的情况下,才能形成死锁吧?
作者: zly1992008    时间: 2014-6-13 08:58
二楼正解。楼主自己写一个死锁出来就理解了
作者: Crystal静新    时间: 2014-6-13 09:05
很简单,两扇门,各自拿一把钥匙,但却被锁在对方拿钥匙的门里,所以都出不来了。

程序里是,各自占用着对方需要的资源,导致双方都无法运行下去。
作者: 张益达    时间: 2014-6-13 09:42
:多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞,因此程序不可能正常终止。 导致死锁.
作者: wssjdysf    时间: 2014-6-13 10:11
大致上说,就是A线程去调用B类中的一上互斥方法,进方法的时候它把锁拿走了,其他的线程就进不去对吧,然后B类中的那个方法是个死循环,那样的话A线程就永远都出不了方法,那其他线程也就永远进不了这个方法,产生死锁
作者: 18353665932    时间: 2014-6-13 11:29
二楼正解!,毕向东视频中有详细解释!
作者: alive    时间: 2014-6-13 23:40
老梁 发表于 2014-6-13 08:52
两个人各自拿了一把钥匙,在都不愿意给对方的情况下,才能形成死锁吧? ...

嗯 两个人各自拿了一把钥匙 肯定是一人一把了:lol
作者: 老梁    时间: 2014-6-14 13:48
alive 发表于 2014-6-13 23:40
嗯 两个人各自拿了一把钥匙 肯定是一人一把了

理解了,谢谢




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