1 public class MyLock { 2 // 建立两把锁对象 3 public static final Object objA = new Object(); 4 public static final Object objB = new Object(); 5 }
// 发生死锁的线程ide
1 public class DieLock extends Thread { 2 3 private boolean flag; 4 5 public DieLock(boolean flag) { 6 this.flag = flag; 7 } 8 9 @Override 10 public void run() { 11 if (flag) { 12 synchronized (MyLock.objA) { 13 System.out.println("if objA"); 14 synchronized (MyLock.objB) { 15 System.out.println("if objB"); 16 } 17 } 18 } else { 19 synchronized (MyLock.objB) { 20 System.out.println("else objB"); 21 synchronized (MyLock.objA) { 22 System.out.println("else objA"); 23 } 24 } 25 } 26 } 27 }
//死锁的测试demo测试
1 /* 2 * 同步的弊端: 3 * A:效率低 4 * B:容易产生死锁 5 * 6 * 死锁: 7 * 两个或两个以上的线程在争夺资源的过程当中,发生的一种相互等待的现象。 8 * 9 * 举例: 10 * 小明和小强的自行车都有两把锁一人一把钥匙案例。 11 * 正常状况: 12 * 小明: 两把锁的钥匙都有; 13 * 小强: 两把锁的钥匙都有。 14 * 如今: 15 * 小明:有其中一把锁的两把钥匙; 16 * 小强:有另外一把锁的两把钥匙。 17 * 结局两我的都不能打开锁。。。。一直等待朔夜起不到自行车 18 */ 19 public class DieLockDemo { 20 public static void main(String[] args) { 21 DieLock dl1 = new DieLock(true); 22 DieLock dl2 = new DieLock(false); 23 24 dl1.start(); 25 dl2.start(); 26 } 27 }