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