Java 重入锁。 unlock方法没有重置header,如何移除包裹在节点中的已执行线程?

Java ReentrantLock. Unlock method does not reset the header, how to remove the executed thread wrapped in a node?

最近在学习JavaReentrantLock源码。 在解锁方法上,它实际上做了两件事: (1) 检查是否获取号==释放号,如果是,设置ExclusiveOwnerThread为null; (2) 如果 (1) OK,unpark successor;

    public final boolean release(int arg) {
        if (tryRelease(arg)) {
            Node h = head;
            if (h != null && h.waitStatus != 0)
                unparkSuccessor(h);
            return true;
        }
        return false;
    }

我的问题是,所有这些操作都没有改变 header 或 dequeue 等待中的任何节点 queue。

如果不重置 header 或 dequeue 操作,等待的 queue 将随着新线程获取锁而无限增长。

任何人都可以指出我在哪里忽略或我的理解有问题吗?

acquireQueued方法中队列操作的头

    final boolean acquireQueued(final Node node, int arg) {
    boolean failed = true;
    try {
        boolean interrupted = false;
        for (;;) {
            final Node p = node.predecessor();
            if (p == head && tryAcquire(arg)) {
                //reset header, the second node of queue will be new header
                setHead(node);
                //help GC, the old header node will be GC
                p.next = null;
                failed = false;
                return interrupted;
            }
            if (shouldParkAfterFailedAcquire(p, node) &&
                parkAndCheckInterrupt())
                interrupted = true;
        }
    } finally {
        if (failed)
            cancelAcquire(node);
    }
}