0

我正在探索 concurrenthashMap API 并发现static final int DEFAULT_CONCURRENCY_LEVEL = 16;哪些声明 map 将在内部分为 16 个部分,现在我的问题是,我们知道在并发 hashMap 的情况下,整个 map 对象没有被锁定,而是在一部分上进行了锁定的地图。

有人可以用一张小图片表示地图是如何划分的,以及它是如何在内部被分割破坏的,以及每个线程如何保护它的一部分,请用一张更有用的小图片提供建议。

4

1 回答 1

0

ConcurrentHashMap 有一个“段”数组,其中每个段是一个完全独立的哈希表,受其自己的互斥体保护。调用线程计算给定密钥的哈希码(32 位),然后使用该密钥的前四位来选择要使用的段。

当线程执行 put() 时,它会锁定段的互斥锁。get() 操作有点棘手,因为它首先尝试在锁定互斥锁的情况下获取值。

于 2014-01-02T21:40:28.357 回答