code: private Node enq(Node node) {
          for (;;) {
              Node oldTail = tail;
              if (oldTail != null) {
                  U.putObject(node, Node.PREV, oldTail);
                  if (compareAndSetTail(oldTail, node)) {
                      oldTail.next = node;
                      return oldTail;
                  }
              } else {
                  initializeSyncQueue();
              }
          }
      }
docs: Inserts node into queue, initializing if necessary. See picture above.
  @param node the node to insert
  @return node's predecessor