code: private boolean advanceHead(QNode h, QNode nh) {
      if (h == this.head.get() && this.head.compareAndSet(h, nh)) {
        h.next = h; // forget old next
        return true;
      }
      return false;
    }
docs: Tries to cas nh as new head; if successful, unlink old head's next node to avoid garbage
  retention.