-1
为什么下面的代码不是死锁并且工作正常?java基本多线程
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”对象进行同步。但它工作正常。
感谢您的解释,我认为如果我需要一个可重入的锁,我应该使用java.util.concurrent.locks.ReentrantLock。此外,我认为我的问题中的代码是死锁,但jvm或编译器“优化”我的代码以防止死锁。 –