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

时间:2019-07-10 11:31:11

标签: java java-8 optional synchronized design-principles

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

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

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

synchronized(product) {

    ...

}

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

1 个答案:

答案 0 :(得分:4)

因为

  

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

Source(Oracle)

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