<< RESIZE_STAMP_SHIFT)return;finishing = advance = true;//最后退出的线程要重新check下是否全部迁移完毕i = n; // recheck before commit}}else if ((f = tabAt(tab, i)) == null)advance = casTabAt(tab, i, null, fwd);else if ((fh = f.hash) == MOVED)advance = true; // already processed//迁移node节点else {synchronized (f) {if (tabAt(tab, i) == f) {Node ln, hn;//链表迁移if (fh >= 0) {int runBit = fhNode lastRun = f;for (Node p = f.next; p != null; p = p.next) {int b = p.hashif (b != runBit) {runBit = b;lastRun = p;}}if (runBit == 0) {ln = lastRun;hn = null;}else {hn = lastRun;ln = null;}//将node链表 , 分成2个新的node链表for (Node p = f; p != lastRun; p = p.next) {int ph = p.hash; K pk = p.key; V pv = p.val;if ((phelsehn = new Node(ph, pk, pv, hn);}//将新node链表赋给nextTabsetTabAt(nextTab, i, ln);setTabAt(nextTab, i + n, hn);setTabAt(tab, i, fwd);advance = true;}//红黑树迁移else if (f instanceof TreeBin) {TreeBin t = (TreeBin)f;TreeNode lo = null, loTail = null;TreeNode hi = null, hiTail = null;int lc = 0, hc = 0;for (Node e = t.first; e != null; e = e.next) {int h = e.hash;TreeNode p = new TreeNode(h, e.key, e.val, null, null);if ((helseloTail.next = p;loTail = p;++lc;}else {if ((p.prev = hiTail) == null)hi = p;elsehiTail.next = p;hiTail = p;++hc;}}ln = (lc <= UNTREEIFY_THRESHOLD) ? untreeify(lo) :(hc != 0) ? new TreeBin(lo) : t;hn = (hc <= UNTREEIFY_THRESHOLD) ? untreeify(hi) :(lc != 0) ? new TreeBin(hi) : t;setTabAt(nextTab, i, ln);setTabAt(nextTab, i + n, hn);setTabAt(tab, i, fwd);advance = true;}}}}}}作者:故人
出处:
突击并发编程JUC系列演示代码地址:
推荐阅读
-
#挖贝网#财务费用增加,欧宝新材2019年亏损893.36万元
-
锋哥读史|最没存在感的恒大旧将,却让卡帅热情相待,期待保级大战被重用
-
禄可科技集团 热烈庆祝禄可科技集团兵商学院第十一期科创特训营圆满成功
-
TopGame|NBA2KOL2:诺天王的最好替代品,平民玩家如何用抽烟战术上分
-
-
沉默的真相|沉默的真相:丁春妹的隐疾,原来来自侯贵平,自作孽不可活
-
-
十八岁的天空|《十八岁的天空》20年后5大主演现状,有人已成国家一级演员
-
ETtoday新闻云|道琼小跌等零售业公布Q2财报,纳斯涨110点再创新高!美股涨跌互见
-
-
数据线|支持华为40W快充台电三种接口数据线上市:18.9元起
-
-
-
望尘莫及|林心如夫妻外出聚餐穿衣宽松,不时抚胸似干呕,难道怀二胎了吗
-
李厚霖|原创李湘被前夫暗讽嫁错了人?至今未回应王岳伦事件,发3个爱心引热议
-
嘻哈段子|抱起我就往粪坑里跳!,幽默笑话:正酣睡的老爸被惊醒
-
-
健康|天冷,早餐这样吃,尤其这碗面,健康营养味道好,吃着肠胃舒服
-
清朝|在清朝的历史上,几乎没出现一个昏君,为何还是最终走向灭亡?
-
社会|快评|新员工不喝酒就被扇耳光,膨胀的权力谁给的?