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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 蒲公英在飞 中级黑马   /  2014-7-17 08:42  /  1107 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

请详细解释什么是死锁?

4 个回复

倒序浏览
死锁是指多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。因为线程被无限期地阻塞,因此程序不可能正常终止。

导致死锁的根源在于不适当地运用“synchronized”关键词来管理线程对特定对象的访问。“synchronized”关键词的作用是,确保在某个时刻只有一个线程被允许执行特定的代码块,因此,被允许执行的线程首先必须拥有对变量或对象的独自访问权。当线程访问对象时,线程会给对象加锁,而这个锁导致其它也想访问同一对象的线程被阻塞,直至第一个线程释放它加在对象上的锁。 如果在线程访问对象时,遇到了其他线程的锁,而这个锁还没有被释放,那么该线程虽然对操作对象加上了锁,但无法访问,而其他对象因为该线程的存在也无法操作该对象了。
回复 使用道具 举报
简单理解 就是锁的嵌套循环,比如说两个加锁程序,其里面还都有一个锁,当我们执行线程时,Thread-0拿到执行的obj1锁,进入后里面需要obj2锁才能执行,这时cpu切换到另一个程序,Thread-1拿到执行的obj2锁,进入后需要obj1锁才能执行后面的操作,这样就死锁了。
回复 使用道具 举报
再简单理解:甲乙吃饭,一双筷子,甲有一支,乙有一支,谁都不放筷子,谁都吃不了。线程一执行需要AB资源,二也需要AB资源,一占用了A,二占用了B,互相需要对方资源继续运行,获取不到又都无法释放自己已经占用的资源
回复 使用道具 举报
同步嵌套,有两个锁,两个同步各拿一个锁?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马