code: public E take() throws InterruptedException {
  		final ReentrantLock lock = this.lock;
  		lock.lockInterruptibly();
  		try {
  			while (a[start] == null) nextObjectReady.await();
  			@SuppressWarnings("unchecked")
  			final E x = (E)a[start];
  			a[start] = null;
  			start = start + 1 & mask;
  			--count;
  			timeStamp++;
  			newSpaceAvailable.signalAll();
  			return x;
  		}
  		finally {
  			lock.unlock();
  		}
  	}
docs: Returns the element with the next timestamp, waiting until it is available.
  
  <p>Note that because of the reordering semantics, an invocation of this method
  on a {@linkplain #isEmpty() nonempty} queue might block nonetheless.
  
  @return the element with the next timestamp.