繁体   English   中英

ConcurrentHashMap为什么锁定段?

[英]ConcurrentHashMap why locking segments?

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

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

  2. 您可以将细分视为类似于内部HashMap ,该细分仅提供哈希码的子集。 它需要有效访问元素。 因此,您不仅应该仅对一个键进行阻止,而且不能对整个结构进行访问。 否则,由于不同步的修改,您有可能破坏内部数据构造函数。

基本上, Segment = HashCode HashCodes不是每个键唯一的(两个不同的键可以具有相同的HashCode ),并且HashMaps基于HashCode存储。

现在,您不必为此担心太多,但基本上,每个段都是隔离空间 (AKA)的最小单位 ,更改/删除/添加项目到段可能会影响对该段的其他访问。

因此,段是锁定的,因为这是在所有可能的访问情况下都可以安全使用的最小空间单元

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM