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 }