<< 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系列演示代码地址:
推荐阅读
-
-
一名90后辣妈妈■印度包机来华采购物资,转身却关闭市场,限制药品出口,疫情告急
-
山水画|老牌国企公开招聘,工作稳定且福利待遇好,平均年薪可达10万
-
-
长的好看的女生一起出去旅游是不是危险更大,有哪些需要注意的地方
-
搞笑阿林|「幽默笑话」在碧桂园工作了两个月发了50万的工资
-
-
-
-
-
书法一定有你喜欢的,第十届国展书法入展作品,精选6幅
-
小小的大鱼爱发飙的三大星座,尤其第一,最为可怕白羊座狮子座射手座,一生气
-
-
奇书平安经爆红始末|奇书平安经爆红始末 各方如何回应?
-
AG|绝迹逆天1V4,常旭三杀后蛰伏新点位整场爆发
-
古道西风过|地主家也没有余粮了,英国脱欧的真正原因是什么
-
-
紫禁城|梦幻西游:二狗为紫禁城再卫冕,三指挥势不可挡,爆爆时代开启!
-
-