Java 中的死锁

Java juc About 1,059 words

描述

线程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();
    }

}
Views: 1,701 · Posted: 2021-04-04

————        END        ————

Give me a Star, Thanks:)

https://github.com/fendoudebb/LiteNote

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

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


Today On History
Browsing Refresh