为什么永远不应该对可选Java对象使用同步

Moh*_*leb 9 java synchronized design-principles optional java-8

我正在学习Java可选包装器,为此,我正在阅读以下教程

但是,我有一个简单的问题未在文章中得到解答:在第25项:避免对Optional使用身份敏感操作时,他们提到永远不要以这种同步方式使用可选对象:

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

synchronized(product) {

    ...

}
Run Code Online (Sandbox Code Playgroud)

但没有解释为什么,所以请在这里的任何人向我解释为什么这是一种不好的做法吗?

Mic*_*ael 5

因为

[基于值的类]在相等时可以自由替换,这意味着equals()在任何计算或方法调用中互换相等的任何两个实例x和y都 不会在行为上产生任何可见的变化。”

来源(Oracle)

如果X和Y上有一个固有的锁,则不能随意替换X和Y,因为这样做可能会导致行为发生变化。