把程序运行过程简单分析一下就知道了:
首先t1启动,获得resource1,然后sleep(1000),
t2启动,获得resource2,然后sleep(1000)
t1的sleep结束后,放弃了对resource1的占用,然后再申请resource2(问题就在这里)
t2的sleep结束后,放弃了对resource2的占用,申请resource1(此时t1已经释放了resource1),申请成功
而后t1申请resource2也可以申请成功了
所以不会出现死锁我把程序部分代码移了个位就会死锁了:
class DeadLock {
      public static void main(String[] args) 
      {
    final Object resource1 = "resource1";
    final Object resource2 = "resource2";
    
    Thread t1 = new Thread() {
  public void run() {
synchronized(resource1) {
      System.out.println("Thread1 pocess the resource1");
      
      try {
    Thread.sleep (1000);
      } catch(InterruptedException e) {
      }
      synchronized(resource2) {
      System.out.println("Thread1 pocess the resource2");
}
}


  }
    };
    Thread t2 = new Thread() {
  public void run() {
synchronized(resource2) {
      System.out.println("Thread2 pocess the resource2");
      
      try {
    Thread.sleep (1000);
      } catch(InterruptedException e) {
      }
      synchronized(resource1) {
      System.out.println("Thread2 pocess the resource1");
}
}


  }
    };
    
    t1.start ();
    t2.start ();
      }
}