日期:2014-05-20  浏览次数:20615 次

为啥不会产生死锁!
如下代码,应该会 死 锁的,为啥 不会死锁?
Java code
public class TestDeadLock implements Runnable
{
    public int flag = 1 ;
    static Object o1 = new Object(),o2 = new Object();
    public void run()
    {
          System.out.println("flag = "+flag);
          if(flag == 1)
          {
                synchronized(o1)
                {
                      try
                      {
                            Thread.sleep(200);
                      }
                      catch(Exception e)
                      {
                            e.printStackTrace();
                      }
                      
                }
                synchronized(o2)
                {
                      System.out.println("1");
                }
          }
    
    
    if(flag == 0)
    {
         synchronized(o2)
         {
               try
               {
                     Thread.sleep(200);
               }
               catch(Exception e )
               {
                    e.printStackTrace();
               }
               synchronized(o1)
               {
                   System.out.println("0");
               }
             
         }
    }
  }
    
    public static void main(String[] args)
    {
         TestDeadLock td1 = new TestDeadLock();
         TestDeadLock td2 = new TestDeadLock();
         td1.flag = 1 ;
         td2.flag = 0 ;
         
         Thread t1 = new Thread(td1);
         Thread t2 = new Thread(td2);
         t1.start();
         t2.start();
         
    }
}


------解决方案--------------------
Java code
         synchronized(o2)
                {
                      System.out.println("1");
                }