java.util.concurrent.ConcurrentHashMap:
ConcurrentHashMap是支持高并发、高吞吐量的线程安全的HashMap实现。它允许多个修改操作并发进行,关键在于使用了多个锁来控制对hash表的不同部分(Segment)进行的修改。每个段是一个小的hash table,有自己的锁,只要修改操作发生在不同的段上,就可以并发进行。在执行跨段的操作时首先尝试在不锁定整个map的情况下进行操作,不成功后再锁定整个map。key和value都不能为null。
ConcurrentHashMap中的重要字段:
1. int DEFAULT_INITIAL_CAPACITY
默认初始容量。这个容量会均匀分布到每个Segment中,即每一段的小hash table的容量是一样的。
2. float DEFAULT_LOAD_FACTOR
默认装载因子。每个段的装载因子。
3. int DEFAULT_CONCURRENCY_LEVEL
默认的并发级别。段的个数(也就是segments数组的大小)要大于这个值,而且要是2的n次方。
4. int MAXIMUM_CAPACITY
ConcurrentHashMap的最大容量。初始容量不能大于这个值。
5. int MAX_SEGMENTS
段个数的最大值。并发级别的值concurrencyLevel不能大于这个数。
6. int RETRIES_BEFORE_LOCK
跨段操作时(如size()和containsValue()),检测到数据不一致,锁定整个map前,重新尝试的次数。
7. Segment<K,V>[] segments
存放段(Segment)的数组
ConcurrentHashMap的构造函数:
1. ConcurrentHashMap()
2. ConcurrentHashMap(int initialCapacity)
3. ConcurrentHashMap(int initialCapacity, float loadFactor)
4. ConcurrentHashMap(int initialCapacity, float loadFactor, int concurrencyLevel)
5. ConcurrentHashMap(Map<? extends K, ? extends V> m)
进行构造时,利用指定的initialCapacity、loadFactor、concurrencyLevel生成segments数组,数组的大小是2的n次方且大于concurrencyLevel,数组中每个段Segment的初始容量和装载因子由initialCapacity、loadFactor来确定。
ConcurrentHashMap是支持高并发、高吞吐量的线程安全的HashMap实现。它允许多个修改操作并发进行,关键在于使用了多个锁来控制对hash表的不同部分(Segment)进行的修改。每个段是一个小的hash table,有自己的锁,只要修改操作发生在不同的段上,就可以并发进行。在执行跨段的操作时首先尝试在不锁定整个map的情况下进行操作,不成功后再锁定整个map。key和value都不能为null。
ConcurrentHashMap中的重要字段:
1. int DEFAULT_INITIAL_CAPACITY
默认初始容量。这个容量会均匀分布到每个Segment中,即每一段的小hash table的容量是一样的。
2. float DEFAULT_LOAD_FACTOR
默认装载因子。每个段的装载因子。
3. int DEFAULT_CONCURRENCY_LEVEL
默认的并发级别。段的个数(也就是segments数组的大小)要大于这个值,而且要是2的n次方。
4. int MAXIMUM_CAPACITY
ConcurrentHashMap的最大容量。初始容量不能大于这个值。
5. int MAX_SEGMENTS
段个数的最大值。并发级别的值concurrencyLevel不能大于这个数。
6. int RETRIES_BEFORE_LOCK
跨段操作时(如size()和containsValue()),检测到数据不一致,锁定整个map前,重新尝试的次数。
7. Segment<K,V>[] segments
存放段(Segment)的数组
ConcurrentHashMap的构造函数:
1. ConcurrentHashMap()
2. ConcurrentHashMap(int initialCapacity)
3. ConcurrentHashMap(int initialCapacity, float loadFactor)
4. ConcurrentHashMap(int initialCapacity, float loadFactor, int concurrencyLevel)
5. ConcurrentHashMap(Map<? extends K, ? extends V> m)
进行构造时,利用指定的initialCapacity、loadFactor、concurrencyLevel生成segments数组,数组的大小是2的n次方且大于concurrencyLevel,数组中每个段Segment的初始容量和装载因子由initialCapacity、loadFactor来确定。