code: public int peek(long timeout, TimeUnit unit)
              throws InterruptedException, TimeoutException {
  
          // non volatile read  ( which is quicker )
          final int readLocation = this.consumerReadLocation;
  
          blockForReadSpace(timeout, unit, readLocation);
  
          // purposely not volatile as the read memory barrier occurred above when we read ' this.readLocation'
          return data[readLocation];
  
      }
docs: Retrieves, but does not remove, the head of this queue.
  
  @param timeout how long to wait before giving up, in units of <tt>unit</tt>
  @param unit    a <tt>TimeUnit</tt> determining how to interpret the <tt>timeout</tt> parameter
  @return the head of this queue
  @throws java.util.concurrent.TimeoutException if timeout time is exceeded