Почему код ниже не является тупиком и отлично работает?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 или компилятор не может вызывать метод2(), потому что этот метод также синхронизируется монитором «моего» объекта. Но он отлично работает.
Спасибо за ваши объяснения, я посчитал, что если мне нужен реентератор, я должен использовать java.util.concurrent.locks.ReentrantLock. Кроме того, я стараюсь, чтобы код в моем Вопросе был тупиком, но jvm или компилятор «оптимизировал» мой код, чтобы предотвратить тупик. –