黑马程序员技术交流社区

标题: 多线程问题,死锁。 [打印本页]

作者: 锦宁    时间: 2014-6-27 21:52
标题: 多线程问题,死锁。
什么情况下会发生死锁,如何解决死锁问题??
作者: Maple_枫    时间: 2014-6-27 22:05
当两个或多个线程的锁对象不是同一个时会发生死锁
作者: HF_Opticalix    时间: 2014-6-27 22:19
楼上不对吧 两个线程都持有同一把锁时 由于都需要等待对方释放资源 才会发生死锁
举例如下 两个线程分别执行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:25
本帖最后由 九号球 于 2014-6-27 22:27 编辑

死锁最容易在嵌套的同步锁中出现,当外层的线程拿着里层的同步锁,离层的线程拿着外层的同步锁时,就会发生死锁现象。
作者: 锦宁    时间: 2014-6-28 00:24
有些了解了!!!




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