最简单的死锁实例

1 public class MyLock {
2     // 创建两把锁对象
3     public static final Object objA = new Object();
4     public static final Object objB = new Object();
5 }

// 发生死锁的线程

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 }

转载于:https://my.oschina.net/u/1185936/blog/857181

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值