我有一个ConcurrentHashMap,我尝试使用putIfAbsent()放置一个键值对。 现在,由于在并发HashMap上工作的每个线程都有其自己的段,该段由一组键值对组成。是将新的键值对放在自己的段中,还是没有强制性的要求?
谢谢
答案 0 :(得分:3)
您有一个基本的误解。线程 not 没有自己的段。 ConcurrentHashMap
的映射根据其键的哈希码分布在段上,并且在最佳情况下,访问不同键的线程最终位于不同的段,因此可以独立工作
访问同一密钥的线程永远不会在不同的段结束。 Map
的所有键都是唯一的原理不变。
但是,这仍然是对过时技术的描述。自Java 8起,ConcurrentHashMap
不再使用段。根据容量和哈希码分布,所有密钥可能会同时更新。