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/