分割在的ConcurrentHashMap(Segmentation in ConcurrentHa

2019-08-20 03:00发布

我是新手到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的基本面,以及为什么使用它? 请告知更多的区隔概念。

Answer 1:

并发哈希映射划分其内容成段,以减少写入器锁争用。

所述concurrencyLevel参数定义的段的数量。 这是16默认情况下。



Answer 2:

只需添加到其他伟大的答案,ConcurrentHashMap的分割地图分成若干段(创建地图或16的默认并发级别当基于并发级别集)。

并发读取在同一个细分获得最近更新的值,读不需要锁而不会被阻塞。 写在不同的段可以发生同时地,然而,在相同的段的两个写入可能阻塞。

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



文章来源: Segmentation in ConcurrentHashMap