java - ConcurrentHashMap 操作是线程安全的

标签 java collections

ConcurrentHashMap 的 Java 文档说,

even though all operations are thread-safe

当我们说ConcurrentHashMap的所有操作都是线程安全时,是什么意思?

编辑: 我的意思是问,假设有 put() 操作。那么根据上面的说法 CHM 中的 put() 是线程安全的。这是什么意思?

最佳答案

来自维基百科:

A piece of code is thread-safe if it only manipulates shared data structures in a manner that guarantees safe execution by multiple threads at the same time.

为了回答您的扩展问题,如果多个线程执行 put() ,效果将是最后一个运行的线程将设置映射中该键的值。所有看跌期权都会按某种顺序发生,但它们不会相互干扰。如果没有并发保证,它们会如何干扰?那么,如果之前没有值与映射或先前的值关联,则 put() 返回 null。如果两个 put 发生在非并发映射上,它们都可以从 put 中获得相同的返回值。

这个序列在没有并发的情况下也是可能的:

Thread1: map.put("key1", "value1") => null

然后

Thread2: map.put("key2", "value2") => "value1"
Thread3: map.put("key3", "value3") => "value1"

如果 Thread3 在 Thread2 之后进入,它可能会看到“value1”而不是“value2”,即使这不是它所替换的内容。这在并发 map 中不会发生。

关于java - ConcurrentHashMap 操作是线程安全的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21525697/

相关文章:

C#泛型问题

java - 可从 Eclipse RCP 中的多个模块访问包

java - Android Intent 中 SecondActivity.class 的正确含义?

java - 测试 ResultSet 以查看它是否包含列标签

java - <identifier> HashSet 上的 add 方法出现预期 Java 编译时错误

java - Collections.shuffle() 真的足够随机吗?实际例子似乎否定了这种说法

java - 使用不同的返回类型覆盖(通用集合)

java - 为什么我不能在我的 ArrayList<T> 上调用 Collections.sort()?

java - 我正在尝试从 JAVA 中的 MultiMap(org.apache.commons.collections.MultiMap) 中删除单个值

Java——私有(private)构造函数 vs final 等等