1.3w字,一文详解死锁!(1)

简介: 1.3w字,一文详解死锁!(1)

死锁(Dead Lock)指的是两个或两个以上的运算单元(进程、线程或协程),都在等待对方停止执行,以取得系统资源,但是没有一方提前退出,就称为死锁。


微信图片_20220120215613.jpg


1.死锁演示


死锁的形成分为两个方面,一个是使用内置锁 synchronized 形成的死锁,另一种是使用显式锁 Lock 实现的死锁,接下来我们分别来看。


1.1 死锁 synchronized 版


publicclass DeadLockExample {
    public static void main(String[] args) {
        Object lockA = new Object(); // 创建锁 A
        Object lockB = new Object(); // 创建锁 B
        // 创建线程 1
        Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                // 先获取锁 A
                synchronized (lockA) {
                    System.out.println("线程 1:获取到锁 A!");
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    // 尝试获取锁 B
                    System.out.println("线程 1:等待获取 B...");
                    synchronized (lockB) {
                        System.out.println("线程 1:获取到锁 B!");
                    }
                }
            }
        });
        t1.start(); // 运行线程
        // 创建线程 2
        Thread t2 = new Thread(new Runnable() {
            @Override
            public void run() {
                // 先获取锁 B
                synchronized (lockB) {
                    System.out.println("线程 2:获取到锁 B!");
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    // 尝试获取锁 A
                    System.out.println("线程 2:等待获取 A...");
                    synchronized (lockA) {
                        System.out.println("线程 2:获取到锁 A!");
                    }
                }
            }
        });
        t2.start(); // 运行线程
    }
}


以上程序的执行结果如下:


微信图片_20220120215702.jpg


从上述结果可以看出,线程 1 和线程 2 都在等待对方释放锁,这样就造成了死锁问题。



相关文章
|
算法 安全 Java
Java多线程与并发框(完结篇)——再看不懂我找不到女朋友
Java多线程与并发框(完结篇)——再看不懂我找不到女朋友
62 0
Java多线程与并发框(完结篇)——再看不懂我找不到女朋友
|
存储 安全 Java
Java多线程基础——两万字详解
进程简单来说就是正在运行的程序,是可以通过双击执行的.exe文件,打开我们电脑的任务管理器,可以看到我们的电脑正在执行的进程,目前我们的电脑都是多进程模式。
119 0
Java多线程基础——两万字详解
2w字 + 41张图带你参透并发编程!(三)
在计算机最早期的时候,没有操作系统,执行程序只需要一种方式,那就是从头到尾依次执行。任何资源都会为这个程序服务,在计算机使用某些资源时,其他资源就会空闲,就会存在 浪费资源 的情况。
2w字 + 41张图带你参透并发编程!(三)
|
存储 缓存 安全
2w字 + 40张图带你参透并发编程!(一)
在计算机最早期的时候,没有操作系统,执行程序只需要一种方式,那就是从头到尾依次执行。任何资源都会为这个程序服务,在计算机使用某些资源时,其他资源就会空闲,就会存在 浪费资源 的情况。
2w字 + 40张图带你参透并发编程!(一)
1.3w字,一文详解死锁!(12)
1.3w字,一文详解死锁!(12)
81 0
1.3w字,一文详解死锁!(12)
1.3w字,一文详解死锁!(2)
1.3w字,一文详解死锁!(2)
112 0
1.3w字,一文详解死锁!(2)
1.3w字,一文详解死锁!(11)
1.3w字,一文详解死锁!(11)
62 0
1.3w字,一文详解死锁!(11)
|
Java
1.3w字,一文详解死锁!(14)
1.3w字,一文详解死锁!(14)
110 0
1.3w字,一文详解死锁!(14)
|
运维 监控 Oracle
1.3w字,一文详解死锁!(6)
1.3w字,一文详解死锁!(6)
111 0
1.3w字,一文详解死锁!(6)
1.3w字,一文详解死锁!(10)
1.3w字,一文详解死锁!(10)
67 0
1.3w字,一文详解死锁!(10)