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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 锦宁 中级黑马   /  2014-6-27 21:52  /  797 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

什么情况下会发生死锁,如何解决死锁问题??

4 个回复

倒序浏览
当两个或多个线程的锁对象不是同一个时会发生死锁
回复 使用道具 举报
楼上不对吧 两个线程都持有同一把锁时 由于都需要等待对方释放资源 才会发生死锁
举例如下 两个线程分别执行flag=0和=1的代码
  1. public void run()
  2.         {
  3.                 if (flag == 1)
  4.                 {
  5.                         synchronized(TheLock.locka)
  6.                         {
  7.                                 System.out.println("flag0 a");
  8.                                 try{Thread.sleep(10);}catch (Exception e){}//延迟一下保证另一个线程进来
  9.                                 synchronized(TheLock.lockb)//需要b锁 却已被另一个线程占用
  10.                                 {
  11.                                         System.out.println("flag0 b");
  12.                                 }
  13.                         }
  14.                 }
  15.                 else
  16.                 {
  17.                         synchronized(TheLock.lockb)
  18.                         {
  19.                                 System.out.println("flag1 b");
  20.                                 try{Thread.sleep(10);}catch (Exception e){}
  21.                                 synchronized(TheLock.locka)
  22.                                 {
  23.                                         System.out.println("flag1 a");
  24.                                 }
  25.                         }
  26.                 }
  27.         }
复制代码
回复 使用道具 举报
本帖最后由 九号球 于 2014-6-27 22:27 编辑

死锁最容易在嵌套的同步锁中出现,当外层的线程拿着里层的同步锁,离层的线程拿着外层的同步锁时,就会发生死锁现象。
回复 使用道具 举报
有些了解了!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马