黑马程序员技术交流社区

标题: 最简单的死锁是不是这样(我理解) [打印本页]

作者: Solomon    时间: 2014-6-9 17:45
标题: 最简单的死锁是不是这样(我理解)
   锁1{  锁2{ }   }

   锁2{  锁1{ }   }

作者: 朱晓盼    时间: 2014-6-9 17:54
同步内嵌套同步就会产生死锁的情况
作者: 123_yaya    时间: 2014-6-9 18:48
差不多,但并不是一定会出现死锁,加个while(true)的话就一定会出现死锁了。。
作者: 18353665932    时间: 2014-6-9 19:00

  1. class Test implements Runnable
  2. {
  3.    private boolean flag;
  4.    Test(boolean flag)
  5.    {
  6.     this.flag = flag;
  7.        
  8.    }
  9.     public void run()
  10.         {
  11.         if(flag){
  12.         while(true){
  13.           synchronized(Mylock.locka)
  14.           {
  15.             System.out.println("if.....");
  16.            synchronized(Mylock.lockb)
  17.            {
  18.            System.out.println("if.....");
  19.            }
  20.           }
  21.           }
  22.           }
  23.           else
  24.           {
  25.           while(true){
  26.           synchronized(Mylock.lockb)
  27.           {
  28.              System.out.println("else....");
  29.                  synchronized(Mylock.locka)
  30.                  {
  31.                   System.out.println("else.....");
  32.                  }
  33.                  
  34.           
  35.           }
  36.           
  37.           
  38.           }
  39.        
  40.         }
  41. }
  42. }
  43. public Mylock
  44. {
  45. public static Object locka = new Object();
  46. public static Object lockb = new Object();

  47. }

  48. class DeadLockTest
  49. {
  50.    public static void main(String[] args)
  51.    {
  52.    
  53.    
  54.    Test a = new Test(true);
  55.    Test b = new Test(false);
  56.    Thread t1 = new Thread(a);
  57.     Thread t2 = new Thread(b);
  58.         t1.start();
  59.         t2.start();
  60.    
  61.    
  62.    }

  63. }
复制代码


代码如上,如果仅仅是嵌套有时候锁不上,需要加上while(true),就一定能锁上了,这个算是比较简单的锁了!
作者: 曲佳奇    时间: 2014-6-9 19:17
产生死锁的原因主要有:
1、临界资源使用的互斥性
一个资源每次只能给一个进程使用
2、部分地分配资源.  
一个进程在申请新的资源的同时保持对原有资源的占有(只有这样才是动态申请,动态分配)
3、资源的循环等待.
存在一个进程等待队列 {P1 , P2 , … , Pn},其中P1等待P2占有的资源,P2等待P3占有的资源…Pn等待P1占有的资源,形成一个进程等待环路
4、资源的不可抢占性等.
资源申请者不能强行的从资源占有者手中夺取资源,资源只能由占有者自愿释放

说是原因,也可以称为前提... 4条都满足才会发生死锁

作者: 花花拉拉    时间: 2014-6-9 19:18
看了楼上的解释我也明白了
作者: 赵文豪    时间: 2014-6-9 21:11
感谢楼上解析,受教了哈




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