По моему мнению, следующий фрагмент кода должен привести к взаимоблокировке. Причина в том, что когда поток t1 блокирует статический объект firstData, он получает блокировку класса. Итак, когда он пытается заблокировать другой статический объект secondData, запрос должен блокироваться.
Тем не менее, программа работает нормально и печатает*** Successfully acquired both the locks
Что такого в блокировке статических объектов, чего здесь не хватает?
public class Deadlock {
public static void main(String[] args) {
Thread t1 = new Thread(new DeadlockRunnable());
t1.start();
}
}
class DeadlockRunnable implements Runnable {
static Object firstData = new Object();
static Object secondData = new Object();
public void run() {
synchronized(firstData) {
synchronized(secondData) {
System.out.println("*** Successfully acquired both the locks");
}
}
}
}
Для всех тех, кто ответил, что блокировки на объекте, а не на классе, пожалуйста, взгляните на этот