Как JAVA может дать две блокировки одному и тому же сегменту кода?

У меня есть две блокировки -- lock1 и lock2 в моем коде, и я хочу дать одному сегменту кода эти две блокировки следующим образом:

synchronized(lock1 || lock2) {
    // code
}

Это означает, что если блокировка1 или блокировка2 занята, этот сегмент кода будет ожидать освобождения обеих блокировок. Как я могу это сделать? Спасибо.


person Felix LL    schedule 15.02.2019    source источник


Ответы (1)


Вы можете вложить их:

synchronized (lock1) {
    synchronized (lock2) {
        //code
    }
}

См. этот ответ о возможных рисках, связанных с вложенной блокировкой.

person Kartik    schedule 15.02.2019
comment
Вы можете добавить, что это чревато огромным риском взаимоблокировки, что порядок блокировки чрезвычайно важен, и что вопрос выглядит так, как если бы он был XY Problem тип вопроса - person Hovercraft Full Of Eels; 15.02.2019