docs: private E unlinkFirst() {
          // assert lock.isHeldByCurrentThread();
          Node<E> f = first;
          if (f == null)
              return null;
          Node<E> n = f.next;
          E item = f.item;
          f.item = null;
          f.next = f; // help GC
          first = n;
          if (n == null)
              last = null;
          else
              n.prev = null;
          --count;
          notFull.signal();
          return item;
      }