ConcurrentHashMap中的分段

我是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[] segments; final Segment segmentFor(int paramInt) { return this.segments[(paramInt >>> this.segmentShift & this.segmentMask)]; } 

ConcurrentHashMap中分段的基本原理是什么以及使用它的原因是什么? 请详细说明细分概念。

并发哈希映射将其内容划分为段,以减少写入程序锁争用。

concurrencyLevel参数定义段的数量。 它默认为16。

只是为了添加其他好的答案,ConcurrentHashMap将地图划分为多个段(基于创建映射时设置的并发级别或默认并发级别16)。

同一段内的并发读取获取最近更新的值,读取不需要锁定且不会被阻止。 不同段中的写入可以同时发生,但是,同一段中的两个写入可能会阻塞。

更多内容: https : //docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentHashMap.html

ConcurrentHashMap中的分段可以通过以下方式定义:

将ConcurrentHashMap视为包含每个索引处的小数组的大数组,并且大数组的每个索引称为段,每个段用作HashMap。 ConcurrentHashMap中的默认分段为16。

访问以下URL以获取有关ConcurrentHashMap的更多信息:ConcurrentHashMap的内部工作