-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或編譯器「優化」我的代碼以防止死鎖。 –