ConcurrentHashMap为什么要锁定段?

时间:2017-06-20 18:28:22

标签: java

ConcurrentHashMap通过锁定段来代替锁定整个地图来进行优化。想知道为什么它无法锁定密钥以获得更好的性能。

2 个答案:

答案 0 :(得分:1)

  1. 您无法知道密钥的同步策略。锁定密钥可能会导致意外行为和死锁,因为用户代码已锁定密钥。

  2. 您可以将内部HashMap之类的段视为仅提供哈希码子集。它需要有效地访问元素。因此,您应该阻止访问整个结构,而不仅仅是一个键。否则,由于非同步修改,您可能会损坏内部数据结构。

答案 1 :(得分:-1)

基本上,Segment = HashCodeHashCodes并非每个密钥唯一(两个不同的密钥可以具有相同的HashCode),HashMaps存储基于HashCode

现在,你不应该过分担心它的实现,但基本上,每个段都是 孤立空间的最小单位 ,AKA,改变/删除/添加项目到一个细分可能会影响对该细分的其他访问。

所以Segment被锁定,因为这是最小的 空间单位 ,对所有可能的访问案例都是安全的。