首页   快速返回

ConcurrentHashMap在jdk7和8中的区别     所属分类 java
jdk7

锁分离技术


static final class Segment< K,V> extends ReentrantLock implements Serializable

// The segments, each of which is a specialized hash table.
final Segment< K,V>[] segments;

Segment 是个特殊的 hashmap 
private void rehash(HashEntry< K,V> node)

在Segment上扩容


ReentrantLock+Segment+HashEntry

代码行数 1620

public ConcurrentHashMap(int initialCapacity,float loadFactor, int concurrencyLevel)
根据 concurrencyLevel 计算 Segment 数量

        int ssize = 1;
        while (ssize < concurrencyLevel) {
            ++sshift;
            ssize <<= 1;
        }
        

static final int DEFAULT_INITIAL_CAPACITY = 16;
static final float DEFAULT_LOAD_FACTOR = 0.75f;
static final int DEFAULT_CONCURRENCY_LEVEL = 16;
    

    


jdk8 Node数组+链表+红黑树 synchronized+CAS+HashEntry+红黑树 注意使用的是 synchronized ,不是 ReentrantLock 数据结构类似HashMap 链表的数量大于8,转换成黑红树 代码行数 6312

上一篇     下一篇
docker Busybox 实战

java调用c方法JNA实例

java堆外内存回收机制

优秀投资者的十大特征

springboot web端口设置三种方式

springboot2 actuator 使用