ConcurrentHashMap锁定


问题内容

我在中的某处读到了ConcurrentHashMap,整个地图对象未锁定,而是在部分地图上进行了锁定。

有人可以详细说明锁定何时进入画面吗?

是对的,在读取地图时不涉及锁定,而在更新地图时仅使用锁定吗?


问题答案:

是的,ConcurrentHashMap使用多个锁(默认情况下,使用16个锁),每个锁控制哈希的一部分。

在特定段中设置数据时,将获得该段的锁。

获取数据时,使用易失性读取。如果易失性读取导致未命中,则将获得该段的锁定,以进行成功读取的最后一次尝试。