code: @Override
      public final E poll()
      {
          LinkedQueueNode<E> currConsumerNode = lpConsumerNode(); // don't load twice, it's alright
          LinkedQueueNode<E> nextNode = currConsumerNode.lvNext();
          if (nextNode != null)
          {
              return getSingleConsumerNodeValue(currConsumerNode, nextNode);
          }
          else if (currConsumerNode != lvProducerNode())
          {
              nextNode = spinWaitForNextNode(currConsumerNode);
              // got the next node...
              return getSingleConsumerNodeValue(currConsumerNode, nextNode);
          }
          return null;
      }
docs: {@inheritDoc} <br>
  <p>
  IMPLEMENTATION NOTES:<br>
  Poll is allowed from a SINGLE thread.<br>
  Poll reads the next node from the consumerNode and:
  <ol>
  <li>If it is null, the queue is assumed empty (though it might not be).
  <li>If it is not null set it as the consumer node and return it's now evacuated value.
  </ol>
  This means the consumerNode.value is always null, which is also the starting point for the queue.
  Because null values are not allowed to be offered this is the only node with it's value set to null at
  any one time.
  
  @see MessagePassingQueue#poll()
  @see java.util.Queue#poll()