JAVA实现最简单的死锁现象

导读:本篇文章讲解 JAVA实现最简单的死锁现象,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

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

死锁问题概述

    如果出现了同步嵌套,就容易产生死锁问题
    是指两个或者两个以上的线程在执行的过程中,因争夺资源产生的一种互相等待现象
    死锁:
    两个或者两个以上的线程, 在抢占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();
    }
}

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/14633.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!