我是Java世界的新手,我正在探索ConcurrentHashMap API,我在其中发现了这个:
static final int DEFAULT_INITIAL_CAPACITY = 16;
static final float DEFAULT_LOAD_FACTOR = 0.75F;
static final int DEFAULT_CONCURRENCY_LEVEL = 16;
static final int MAXIMUM_CAPACITY = 1073741824;
static final int MAX_SEGMENTS = 65536;
static final int RETRIES_BEFORE_LOCK = 2;
final Segment<K, V>[] segments;
final Segment<K, V> segmentFor(int paramInt)
{
return this.segments[(paramInt >>> this.segmentShift & this.segmentMask)];
}
ConcurrentHashMap中分段的基本原理是什么以及使用它的原因是什么?请详细说明细分概念。
答案 0 :(得分:2)
并发哈希映射将其内容划分为段,以减少写入程序锁争用。
concurrencyLevel
参数定义了段数。默认情况下是16。
答案 1 :(得分:0)
为了添加其他好的答案,ConcurrentHashMap将地图划分为多个段(基于创建映射时设置的并发级别或默认并发级别16)。
同一段内的并发读取获取最近更新的值,读取不需要锁定且不会被阻止。不同段中的写入可以同时发生,但是,同一段中的两个写入可能会阻塞。
更多信息:https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentHashMap.html