public final T allocate(){
  AtomicInteger topRef=_top;
  while (true) {
    final int top=topRef.get();
    if (top <= 0) {
      return null;
    }
 else     if (topRef.compareAndSet(top,top - 1)) {
      T value=_freeStack.getAndSet(top - 1,null);
      if (value != null) {
        return value;
      }
    }
  }
}

public final T allocate ( ) { AtomicInteger topRef = _top ; while ( true ) { final int top = topRef . get ( ) ; if ( top <= 0 ) { return null ; } else if ( topRef . compareAndSet ( top , top - 1 ) ) { T value = _freeStack . getAndSet ( top - 1 , null ) ; if ( value != null ) { return value ; } } } }
try to get an object from the free list . returns null if the free list is empty .
