我是这么理解的:
sizeCtl为负值且非-1时,应拆分成高16位和低16位来看,低16位的值M=参与扩容的线程数+1,而高16位,最高位表示符号位1,除符号位的值=Integer.numberOfLeadingZeros(n),n是table数组长度。
由于扩容线程数只与sizeCtl的低16位关联,所以线程加入扩容操作时sc+1,完成扩容后sc-1。
所以只能说sizeCtl本身的值跟扩容线程数是没有关系的,但扩容线程数跟sizeCtl的低16位关联。
深入浅出ConcurrentHashMap1.8简书 占小狼转载请注明原创出处,谢谢! 关于文章中的疑问:为什么要构造一个反序链表,放在nextTable的i+n的位置上呢,在《深入分析ConcurrentHashMap1...