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 ( ) ; }
}