黑马程序员技术交流社区

标题: 【黑马云青年 胡浩】这种同步嵌套不死锁? [打印本页]

作者: 胡浩    时间: 2013-6-4 21:50
标题: 【黑马云青年 胡浩】这种同步嵌套不死锁?
本帖最后由 胡浩 于 2013-6-5 13:06 编辑

package com.thread;
class DeadLockTest
{
public static void main(String[] args)
{
  Test a = new Test(true);
  Test b = new Test(false);
  Thread t1 = new Thread(a);
  Thread t2 = new Thread(b);
  t1.start();
  t2.start();
}
}
class Test implements Runnable
{
private boolean flag;
Test(boolean flag)
{
  this.flag = flag;
}
public void run()
{
  
  if(flag)
  {
   while(true)
    synchronized(MyLock.lockb)
    {
     System.out.println(Thread.currentThread().getName()+"..if   lockb....");
     synchronized(MyLock.locka)    {
      
      System.out.println(Thread.currentThread().getName()+"..if   locka....");
     }
    }
  }
  else
  {
   while(true)   
    synchronized(MyLock.lockb)
    {
     System.out.println(Thread.currentThread().getName()+"..else  lockb....");
     synchronized(MyLock.locka)
     {
      System.out.println(Thread.currentThread().getName()+"..else   locka....");
     }
    }
  }
}
}
class MyLock
{
public static final Object locka = new Object();
public static final Object lockb = new Object();
}


两个线程拿的两个所的顺序一致,不死锁?好像是不死锁。

作者: 神之梦    时间: 2013-6-4 22:08
将下面那两a和b或者上面那两a和b互换下应该就会死了
作者: Changer_s    时间: 2013-6-4 22:34
神之梦 发表于 2013-6-4 22:08
将下面那两a和b或者上面那两a和b互换下应该就会死了

换了以后就是必死锁




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