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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wupingtanlu 中级黑马   /  2012-4-21 15:52  /  3220 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

   为什么在方法声明的时候用到了关键字synchronized  后再在方法体中用synchronized就会发生死锁的情况呢!
   如果我们不用同一个锁对象就不是不会发生死锁的情况了吗?求解释,还有死锁还有那些情况导致呢?
      平时写线程的时候要都注意些那些方面呢?

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

3 个回复

倒序浏览
设定到两个锁,也没什么用,就像老师说的,
如果进去里边synchronized的那个对象不释放自己的锁,外边synchronized里的对象进不去,
外边这个不进里面,就不是放当前自己拥有的锁,而里边的确恰恰需要。
两个人就等来等去,死锁了。
死锁的情况,还有饥饿的情况需要区分一下,饥饿是因为两个线程或多个线程用到相同的资源,而这个资源的数目仅仅只够一个人,但是分配的时候
每个线程只分配的很少,所以都不够用,都等着对方释放自己的资源给自己用。就饥饿了。

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

回复 使用道具 举报
我用 通俗易懂的话来描述吧
当线程1进入锁A的时候 线程2进入了锁B 但是当线程2想进入锁A的时候 进不去 同时线程1想进入锁B的时候也进不去 (因为使用了同步嘛  ) 就这样半死不活的拖着 就形成了死锁
一句话总结:N个线程都没有可以运行的代码 因为可运行的代码里已经有别的线程了 但是别的线程又出不来
回复 使用道具 举报
这个~~wait()方法一定要有对应的notify()方法
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马