同样有这个疑惑,请问大佬这个问题找到答案了吗?
并发编程——ConcurrentHashMap#addCount() 分析前言 ConcurrentHashMap 精华代码很多,前面分析了 helpTransfer 和 transfer 和 putVal 方法,今天来分析一下 addCount ...
同样有这个疑惑,请问大佬这个问题找到答案了吗?
并发编程——ConcurrentHashMap#addCount() 分析前言 ConcurrentHashMap 精华代码很多,前面分析了 helpTransfer 和 transfer 和 putVal 方法,今天来分析一下 addCount ...
addCount 函数下面这个地方存在一些问题
注意: sc 是一个本地变量, 进入if(sc<0) 这个分支以后, 值不会再改变, rs 是 resizeStamp 的返回结果, 是一个正值, 按理来说 sc 是不可能等于 rs + 1 的, 我感觉这里像是 jdk 的一个 bug, 正确的判断方法应该是 (sc >>> RESIZE_STAMP_SHIFT) == rs +1 判断扩容是否已经结束
if (sc < 0) {
if ((sc >>> RESIZE_STAMP_SHIFT) != rs || sc == rs + 1 ||
sc == rs + MAX_RESIZERS || (nt = nextTable) == null ||
transferIndex <= 0)
break;
总结:脱裤子炫技