concurrentHashMap1.7

数据加锁就会影响效率 我们尽可能的不去加锁 ,但是必须保证线程的安全   所以底层用到了CAS操作  Unsafe类

 

 

chp的数据默认存放数量为32(16*2)

 

segment继承了可重入锁  ,segment数组是一个个的锁(分段锁),在高并发情况下,各个锁之间不会相互影响,这样保证了效率

 

 

chp的 key、value不允许有空值

 

key的高位 决定了存放在segment数组的坐标

key的地位 决定了存放在hashEntry数组的坐标

 

 

put总结:

segemnt是一个个的锁。某一个segemnt加锁不影响其他segemnt操作、

当有两个线程同时对一个segemnt操作时,另外一个线程会采用自旋的方式去等待锁,拿到后自行添加

 

 

数组扩容

如果元素都是存放在同一个位置的话,只需要迁移一次

 

posted @ 2022-03-08 21:13  11111ghm  阅读(28)  评论(0)    收藏  举报