public IBlockingBuffer<E> newInstance(){
  lock.lock();
  try {
    if (!isOpen())     throw new BufferClosedException();
    final IBlockingBuffer<E> n=new InnerBlockingBuffer();
    if (!set.add(n))     throw new AssertionError();
    counter++;
    return n;
  }
  finally {
    lock.unlock();
  }
}

public IBlockingBuffer < E > newInstance ( ) { lock . lock ( ) ; try { if ( ! isOpen ( ) ) throw new BufferClosedException ( ) ; final IBlockingBuffer < E > n = new InnerBlockingBuffer ( ) ; if ( ! set . add ( n ) ) throw new AssertionError ( ) ; counter ++ ; return n ; } finally { lock . unlock ( ) ; } }
create a new skin for the shared buffer , incrementing the count of the # of open skins that buffer . the shared buffer will be closed atomically once all open skins have been closed .
