Java OpenResty Spring Spring Boot MySQL Redis MongoDB PostgreSQL Linux Android Nginx 面试 小程序 Arthas JVM AQS juc Kubernetes Docker 诊断工具


Java 中的死锁

Java juc 大约 1059 字

描述

线程A先锁定DeadLock字节码对象,在内部延迟1秒,再锁定Object字节码对象。

线程B先锁定Object字节码对象,在内部延迟1秒,再锁定DeadLock字节码对象。

此时会导致:线程A等待线程B释放Object.class锁才能继续执行,而线程B需要DeadLock.class锁才能执行完毕,造成死锁。

代码

public class DeadLock {

    public static void main(String[] args) {
        new Thread(() -> {
            synchronized (DeadLock.class) {
                try {
                    TimeUnit.SECONDS.sleep(1);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                synchronized (Object.class) {
                    System.out.println("Thread 1");
                }
            }
        },"A").start();

        new Thread(() -> {
            synchronized (Object.class) {
                try {
                    TimeUnit.SECONDS.sleep(1);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                synchronized (DeadLock.class) {
                    System.out.println("Thread 2");
                }

            }
        },"B").start();
    }

}
阅读 1226 · 发布于 2021-04-05

————        END        ————

Give me a Star, Thanks:)

https://github.com/fendoudebb

扫描下方二维码关注公众号和小程序↓↓↓

扫描二维码关注我
昵称:
随便看看 换一批