我正在探索concurrenthashMap API并找到static final int
DEFAULT_CONCURRENCY_LEVEL = 16;
,它指出地图将在内部分为16个部分,现在我的查询就是我们知道在并发hashMap的情况下整个地图对象未锁定,而是在地图的一部分上进行锁定。
有人可以用小图片的形式展示地图是如何分割的,以及它如何通过分割在内部破坏,以及每个线程如何保护它的片段,请提供一个更有帮助的小图形图片。
答案 0 :(得分:0)
ConcurrentHashMap有一个'segments'数组,其中每个段是一个完全独立的哈希表,受其自己的互斥锁保护。调用线程计算给定键的哈希码(32位),然后使用它的前四位来选择要使用的段。
当线程执行put()时,它会锁定段的互斥锁。 get()操作有点棘手,因为它首先尝试获取值而不用锁定互斥锁。