我在探索concurrenthashMap应用程序接口时发现了static final int DEFAULT_CONCURRENCY_LEVEL = 16;,它在内部声明映射将被分成16个部分,现在我的查询是,我们知道在并发hashMap的情况下,整个映射对象不是锁定的,而是在映射的一部分上进行锁定。
有人可以在一个小图片表示显示地图是如何划分的,以及它如何通过分割内部打破,以及每个线程如何保护它的片段,请建议与小图形图片,这将是更有帮助的。
发布于 2014-01-03 05:40:28
一个ConcurrentHashMap有一个“段”数组,其中每个段都是一个完全独立的哈希表,由它自己的互斥锁保护。调用线程计算给定键的哈希码(32位),然后使用其中的前四位来挑选要使用的段。
当线程执行put()时,它锁定段的互斥锁。get()操作稍微复杂一些,因为它首先尝试在不锁定互斥锁的情况下获取值。
https://stackoverflow.com/questions/15849865
复制相似问题