java 基本多线程

java basic multithreading

为什么下面的代码不是死锁而且工作正常?

public class Concurrent {

    public static void main(String[] args) {
        Concurrent my = new Concurrent();
        my.method1();

    }

    private synchronized void method1() {
        System.out.println("method1");
        method2();
    }

    private synchronized void method2() {
        System.out.println("method2");
    }
}

Output:
method1
method2

当我调用 method1() 时,监视器被锁定。 JVM 或编译器无法调用 method2(),因为此方法也被 "my" 对象的监视器同步。但它工作正常。

Why doesn't the code in the Question deadlock?

因为原始互斥体(监视器)是可重入的。当给定互斥体中的线程试图再次获取它时,它不会阻塞。

JLS 17.1:

"A thread t may lock a particular monitor multiple times; each unlock reverses the effect of one lock operation."