ConcurrentHashMap源码:put操作详解与未分段数组加锁策略.pdfVIP

  • 1
  • 0
  • 约1.34千字
  • 约 2页
  • 2026-07-01 发布于山西
  • 举报

ConcurrentHashMap源码:put操作详解与未分段数组加锁策略.pdf

put操作源码

inthash=spread(key.hashCode());

对key获取了hashCode,调用了spread算法,获取到了一个hash值

staticfinalintspread(inth){

return(h^(h16))HASH_BITS;

}

他相当于是把hash值的高低16位都考虑到后面的hash取模算法里,这样就可以把hash值

的高低16位的特征都放到hash取模算法来运算,有助于尽可能打散各个key在不同的数组

的位置

降低hash的概率

刚开始,table是null的话,此时就要初始化这个table

U.compareAndSwapInt(this,SIZECTL,sc,-1):CAS操作,sizeCtl=-1

初始化一个table数组,默认的大小就是16

tabAt(tab,i=(n-1)hash),这个就是hash取模的算法,定位的算法,return

(NodeK,V)U.getObjectVolatile(tab,((long)iASHIFT)+ABASE);,数组和hash定位出来的位

置,传递

文档评论(0)

1亿VIP精品文档

相关文档