需要简单的解释“锁条”如何与ConcurrentHashMap一起使用


问题内容

根据Java Concurrency in Practice,第11.4.3章说:

锁拆分有时可以扩展为对一组可变对象的独立对象进行分区锁,在这种情况下,这称为锁拆分。例如,ConcurrentHashMap的实现使用了一个由16个锁组成的数组,每个锁保护着1/16的哈希桶。桶N由锁N
mod 16保护。

我仍然无法理解和可视化锁条和桶机制。有人可以用很好的理解力来解释这个问题吗:)

提前致谢。


问题答案:

哈希图建立在数组上,哈希函数将对象映射到基础数组中的元素。假设基础数组包含1024个元素-
ConcurrentHashMap实际上将其变成16个不同的子数组,包含64个元素,例如{0,63},{64,127}等。每个子数组都有自己的锁,因此修改{0,63}子数组不会影响{64,127}子数组-
一个线程可以写入第一个子数组,而另一个线程写入第二个子数组。