package  qzy. thread. deadLock; 
public  class  DeadLockDemo  { private  static  Object o1 =  new  Object ( ) ; private  static  Object o2 =  new  Object ( ) ; public  static  void  main ( String[ ]  args)  { new  Thread ( ( )  - >  { synchronized  ( o1) { System. out. println ( Thread. currentThread ( ) + ":获取到o1的锁" ) ; try { Thread. sleep ( 2000 ) ; }  catch  ( InterruptedException  e)  { e. printStackTrace ( ) ; } System. out. println ( Thread. currentThread ( ) + ":等待获取o2的锁" ) ; synchronized  ( o2) { System. out. println ( Thread. currentThread ( ) + ":获取到o2的锁" ) ; } } } , "线程1" ) . start ( ) ; new  Thread ( ( )  - >  { synchronized  ( o2) { System. out. println ( Thread. currentThread ( ) + ":获取到o2的锁" ) ; try { Thread. sleep ( 2000 ) ; }  catch  ( InterruptedException  e)  { e. printStackTrace ( ) ; } System. out. println ( Thread. currentThread ( ) + ":等待获取o1的锁" ) ; synchronized  ( o1) { System. out. println ( Thread. currentThread ( ) + ":获取到o1的锁" ) ; } } } , "线程2" ) . start ( ) ; } 
} 
class  UnDeadLock { private  static  Object o1 =  new  Object ( ) ; private  static  Object o2 =  new  Object ( ) ; public  static  void  main ( String[ ]  args)  { new  Thread ( ( )  - >  { synchronized  ( o1) { System. out. println ( Thread. currentThread ( ) + ":获取到o1的锁" ) ; try { Thread. sleep ( 2000 ) ; }  catch  ( InterruptedException  e)  { e. printStackTrace ( ) ; } System. out. println ( Thread. currentThread ( ) + ":等待获取o2的锁" ) ; synchronized  ( o2) { System. out. println ( Thread. currentThread ( ) + ":获取到o2的锁" ) ; } } } , "线程1" ) . start ( ) ; new  Thread ( ( )  - >  { synchronized  ( o1) { System. out. println ( Thread. currentThread ( ) + ":获取到o1的锁" ) ; try { Thread. sleep ( 2000 ) ; }  catch  ( InterruptedException  e)  { e. printStackTrace ( ) ; } System. out. println ( Thread. currentThread ( ) + ":等待获取o2的锁" ) ; synchronized  ( o2) { System. out. println ( Thread. currentThread ( ) + ":获取到o2的锁" ) ; } } } , "线程2" ) . start ( ) ; } 
}