@Override
    public E peek()
    {
        final LinkedQueueNode<E> currConsumerNode = lpConsumerNode();
        LinkedQueueNode<E> nextNode = currConsumerNode.lvNext();
        if (nextNode != null)
        {
            return nextNode.lpValue();
        }
        else if (currConsumerNode != lvProducerNode())
        {
            nextNode = spinWaitForNextNode(currConsumerNode);
            // got the next node...
            return nextNode.lpValue();
        }
        return null;
    }
{@inheritDoc} <br>
<p>
IMPLEMENTATION NOTES:<br>
Peek is allowed from a SINGLE thread.<br>
Peek is potentially blocking here as the {@link Queue#peek()} does not allow returning {@code null} if the queue is not
empty. This is very different from the original Vyukov guarantees. See {@link #relaxedPeek()} for the original
semantics.<br>
Poll reads the next node from the consumerNode and:
<ol>
<li>If it is {@code null} AND the queue is empty return {@code null}, <b>if queue is not empty spin wait for
value to become visible</b>.
<li>If it is not {@code null} return it's value.
</ol>

@see MessagePassingQueue#peek()
@see java.util.Queue#peek()
jctools-core/src/main/java/org/jctools/queues/BaseLinkedQueue.java