最简单的死锁实例

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 }
相关文章
相关标签/搜索