JAVA实现最简单的死锁现象

首先我们要理解什么是死锁,简单来说就是相互持有对方的锁

死锁问题概述

    如果出现了同步嵌套,就容易产生死锁问题
    是指两个或者两个以上的线程在执行的过程中,因争夺资源产生的一种互相等待现象
    死锁:
    两个或者两个以上的线程, 在抢占CPU的执行权的时候, 都处于等待状态
    举例:
    中国人和美国人一起吃饭
            中国人使用的筷子
    美国人使用的刀和叉
            中国人获取到了美国人的刀
    美国人获取到了中国人的一根筷子
    这个时候中国人和美国人都不能继续进行吃饭的操作

同步代块实现简单的死锁现象

//先创建两把锁:
public interface Lock {
    //创建两把锁
    public static final Object objA = new Object();
    Object objB = new Object();
}

// 线程
public class MyThread1 extends Thread {
    //
    boolean flag = true;
    public MyThread1(boolean flag) {
        this.flag = flag;
    }
    
    @Override
    public void run() {
    //这里就是锁套锁的现象
        if (flag) {
            synchronized (Lock.objA) {
                System.out.println("true==objA锁进来了");
                synchronized (Lock.objB) {
                    System.out.println("true==objB锁进来了");
                }
            }
        } else {
            synchronized (Lock.objB) {
                System.out.println("true==objB锁进来了");
                synchronized (Lock.objA) {
                    System.out.println("true==objA锁进来了");
                }
            }
        }
    }
}

//开启线程
public class Mytest {
    public static void main(String[] args) {
        MyThread1 th1 = new MyThread1(true);
        MyThread1 th2 = new MyThread1(false);
        th1.start();
        th2.start();
    }
}

结果可以看到,进程无法结束,进入了死锁现象
在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值