我有点不确定并发集合(例如 ConcurrentMap)对于集合中数据的可见性有何期望。
A:Thread1 放入一个复杂对象,Thread2 获取它。所有属性在 Thread2 中都可见吗?
B:Thread1 放入一个复杂对象,随后更改了一些属性。然后Thread2拿到了,是不是所有的变化在Thread2中都可见?
我猜 B 是假的,如果是这样,我应该同步复杂对象上的每个访问?
最佳答案
推送到并发集合定义为发布它。请参阅包说明中的“Memory Consistency Properties”。
这意味着如果您只是更改存储的对象,则不会自动获得发生之前的关系。您需要使这些更改同步/易失或使用并发原语本身。
关于Java 并发集合和可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27974135/