title: ConcurrentHasMap how to Avoid conflict to modify the sizeCtl in the function of transfer
body: <pre><code> if (i &lt; 0 || i &gt;= n || i + n &gt;= nextn) {
              int sc;
              if (finishing) {
                  nextTable = null;
                  table = nextTab;
                  sizeCtl = (n &lt;&lt; 1) - (n &gt;&gt;&gt; 1);
                  return;
              }
              if (U.compareAndSwapInt(this, SIZECTL, sc = sizeCtl, sc - 1)) {
                  if ((sc - 2) != resizeStamp(n) &lt;&lt; RESIZE_STAMP_SHIFT)
                      return;
                  finishing = advance = true;
                  i = n; // recheck before commit
              }
          }
  </code></pre>
  <p>How to ensure no conflict in ： sizeCtl = (n &lt;&lt; 1) - (n &gt;&gt;&gt; 1); and U.compareAndSwapInt(this, SIZECTL, sc = sizeCtl, sc - 1)；</p>
  <p>for example ： 2 thread into this fucntion, and one thread has finished and set sizeCtl = (n &lt;&lt; 1) - (n &gt;&gt;&gt; 1);
  another thread executed the U.compareAndSwapInt(this, SIZECTL, sc = sizeCtl, sc - 1) successed,so the sizeCtl = (n &lt;&lt; 1) - (n &gt;&gt;&gt; 1) -1? and not equal 0.75 * 2n。in otehr words,sizeCtl Not necessarily equal to 0.75 * n？</p>