A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© dhgcy 中级黑马   /  2014-8-26 21:12  /  761 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

死锁怎么理解?

3 个回复

倒序浏览
应该是所有开启的线程都挂起等待了吧,我也刚看完多线程。。
回复 使用道具 举报
最经典的例子就是,在一条河上有一座桥,桥面较窄,只能容纳一辆汽车通过,无法让两辆汽车并行。如果有两辆汽车A和B分别由桥的两端驶上该桥,则对于A车来说,它走过桥面左面的一段路(即占有了桥的一部分资源),要想过桥还须等待B车让出右边的桥面,此时A车不能前进;对于B车来说,它走过桥面右边的一段路(即占有了桥的一部分资源),要想过桥还须等待A车让出左边的桥面,此时B车也不能前进。两边的车都不倒车,结果造成互相等待对方让出桥面,但是谁也不让路,就会无休止地等下去。这种现象就是死锁  产生死锁的条件是1.循环等待2.不可剥夺3.资源独占4.保持申请
简单的说就是:线程死锁时,第一个线程等待第二个线程释放资源,而同时第二个线程又在等待第一个线程释放资源。
导致死锁的根源在于不适当地运用“synchronized”关键词来管理线程对特定对象的访问。“synchronized”关键词的作用是,确保在某个时刻只有一个线程被允许执行特定的代码块,因此,被允许执行的线程首先必须拥有对变量或对象的排他性访问权。当线程访问对象时,线程会给对象加锁,而这个锁导致其它也想访问同一对象的线程被阻塞,直至第一个线程释放它加在对象上的锁。  或者可以简单理解A锁在调用B锁里面的内容 而B锁同时调用A锁内容 两边抢占的资源都没有释放 所以两边同时卡壳~~

评分

参与人数 1技术分 +2 收起 理由
格子、 + 2 很生动呀

查看全部评分

回复 使用道具 举报
就是有一个资源,有两个线程在同时的争抢着个资源
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马