ConcurrentHashMap通过锁定段来代替锁定整个地图来进行优化。想知道为什么它无法锁定密钥以获得更好的性能。
答案 0 :(得分:1)
您无法知道密钥的同步策略。锁定密钥可能会导致意外行为和死锁,因为用户代码已锁定密钥。
您可以将内部HashMap
之类的段视为仅提供哈希码子集。它需要有效地访问元素。因此,您应该阻止访问整个结构,而不仅仅是一个键。否则,由于非同步修改,您可能会损坏内部数据结构。
答案 1 :(得分:-1)
基本上,Segment = HashCode
。 HashCodes
并非每个密钥唯一(两个不同的密钥可以具有相同的HashCode
),HashMaps
存储基于HashCode
。
现在,你不应该过分担心它的实现,但基本上,每个段都是 孤立空间的最小单位 ,AKA,改变/删除/添加项目到一个细分可能会影响对该细分的其他访问。
所以Segment被锁定,因为这是最小的 空间单位 ,对所有可能的访问案例都是安全的。