private final Node<K,V>[] initTable(){
  Node<K,V>[] tab;
  int sc;
  while ((tab=table) == null || tab.length == 0) {
    if ((sc=sizeCtl) < 0)     Thread.yield();
 else     if (U.compareAndSwapInt(this,SIZECTL,sc,-1)) {
      try {
        if ((tab=table) == null || tab.length == 0) {
          int n=(sc > 0) ? sc : DEFAULT_CAPACITY;
          @SuppressWarnings({"rawtypes","unchecked"}) Node<K,V>[] nt=new Node[n];
          table=tab=nt;
          sc=n - (n >>> 2);
        }
      }
  finally {
        sizeCtl=sc;
      }
      break;
    }
  }
  return tab;
}

private final Node < K , V > [ ] initTable ( ) { Node < K , V > [ ] tab ; int sc ; while ( ( tab = table ) == null || tab . length == 0 ) { if ( ( sc = sizeCtl ) < 0 ) Thread . yield ( ) ; else if ( U . compareAndSwapInt ( this , SIZECTL , sc , - 1 ) ) { try { if ( ( tab = table ) == null || tab . length == 0 ) { int n = ( sc > 0 ) ? sc : DEFAULT_CAPACITY ; @ SuppressWarnings ( { "rawtypes" , "unchecked" } ) Node < K , V > [ ] nt = new Node [ n ] ; table = tab = nt ; sc = n - ( n > > > 2 ) ; } } finally { sizeCtl = sc ; } break ; } } return tab ; }
initializes table , using the size recorded in sizectl .
