Почему вы никогда не должны использовать синхронизированный на Необязательный объект Java - PullRequest
8 голосов
/ 10 июля 2019

Я изучаю необязательную оболочку Java, для этого я читаю следующее учебное пособие

однако у меня есть простой вопрос, на который нет ответа в статье: в пункт 25: Избегайте использования чувствительных к идентификации операций над дополнительными объектами они упоминают НИКОГДА не используют дополнительный объект синхронизированным образом, как это:

Optional<Product> product = Optional.of(new Product());

synchronized(product) {

    ...

}

но нет объяснения, почему, поэтому, пожалуйста, кто-нибудь здесь объяснит мне, почему это плохая практика ???

1 Ответ

4 голосов
/ 10 июля 2019

Поскольку

[основанные на значениях классы] могут свободно заменяться при равенстве, это означает, что при замене любых двух экземпляров x и y, которые равны в соответствии с equals() в любом вычислении или вызове метода, должно получитьсянет видимых изменений в поведении "

Источник (Oracle)

Вы не можете свободно заменять X и Y, если на одном из них есть встроенная блокировка,поскольку это может привести к изменению поведения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...