最簡單的死鎖實例

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 }
相關文章
相關標籤/搜索