concurrentHashMap1.7
数据加锁就会影响效率 我们尽可能的不去加锁 ,但是必须保证线程的安全 所以底层用到了CAS操作 Unsafe类
chp的数据默认存放数量为32(16*2)
segment继承了可重入锁 ,segment数组是一个个的锁(分段锁),在高并发情况下,各个锁之间不会相互影响,这样保证了效率
chp的 key、value不允许有空值
key的高位 决定了存放在segment数组的坐标
key的地位 决定了存放在hashEntry数组的坐标
put总结:
segemnt是一个个的锁。某一个segemnt加锁不影响其他segemnt操作、
当有两个线程同时对一个segemnt操作时,另外一个线程会采用自旋的方式去等待锁,拿到后自行添加
数组扩容
如果元素都是存放在同一个位置的话,只需要迁移一次

浙公网安备 33010602011771号