Блокировка статических членов класса

По моему мнению, следующий фрагмент кода должен привести к взаимоблокировке. Причина в том, что когда поток 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");
            }
        }
    }

}

Для всех тех, кто ответил, что блокировки на объекте, а не на классе, пожалуйста, взгляните на этот

6
задан Community 23 May 2017 в 10:24
поделиться