Java 并发集合和可见性

标签 java java.util.concurrent memory-visibility

我有点不确定并发集合(例如 ConcurrentMap)对于集合中数据的可见性有何期望。

A:Thread1 放入一个复杂对象,Thread2 获取它。所有属性在 Thread2 中都可见吗?

B:Thread1 放入一个复杂对象,随后更改了一些属性。然后Thread2拿到了,是不是所有的变化在Thread2中都可见?

我猜 B 是假的,如果是这样,我应该同步复杂对象上的每个访问?

最佳答案

推送到并发集合定义为发布它。请参阅包说明中的“Memory Consistency Properties”。

这意味着如果您只是更改存储的对象,则不会自动获得发生之前的关系。您需要使这些更改同步/易失或使用并发原语本身。

关于Java 并发集合和可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27974135/

相关文章:

java - 此代码不接受性别输入,而是直接接受城市的最后输入

java - Java 中的同步列表/映射(如果只有一个线程正在写入)

java - 并发 C++ 程序中的可见性

java - java并发编程中的可见性问题

java - 使用构建器/工厂模式确保内存可见性

java - 在 Clojure 中执行此 Java 函数的惯用方法是什么?

java - 如何使用 Ngrok 将简单的 Java HTTP 客户端应用程序连接到 Web 资源?

Java ThreadPool 概念,以及控制实际线程数的问题

java - 在客户端处理 REST 异常

java - 从引用中窃取位