Java Node.PROPAGATE在AQS中的实际角色是什么?

Java Node.PROPAGATE在AQS中的实际角色是什么?,java,Java,AQS内部类节点的节点.PROPAGATE状态仅在共享模式下使用,但当节点.waitStatus为0时,它会导致相同的行为。后续节点是否会循环不止一次,那么除了区分这两种模式之外,他是否还有更多的实际用途 private void doReleaseShared() { for (;;) { Node h = head; if (h != null && h != tail) { int ws = h.wa

AQS内部类
节点的
节点.PROPAGATE
状态仅在共享模式下使用,但当
节点.waitStatus
为0时,它会导致相同的行为。后续节点是否会循环不止一次,那么除了区分这两种模式之外,他是否还有更多的实际用途

    private void doReleaseShared() {

    for (;;) {
        Node h = head;
        if (h != null && h != tail) {
            int ws = h.waitStatus;
            if (ws == Node.SIGNAL) {
                if (!h.compareAndSetWaitStatus(Node.SIGNAL, 0))
                    continue;            // loop to recheck cases
                unparkSuccessor(h);
            }
            else if (ws == 0 &&
                     !h.compareAndSetWaitStatus(0, Node.PROPAGATE))
                continue;                // loop on failed CAS
        }
        if (h == head)                   // loop if head changed
            break;
    }
}

我的问题在这里生成。

waitStatus value Node.PROPAGATE只能为head节点设置。仅指示头节点的成功节点将传播未解析成功节点行为。因为当当前节点成功获取共享锁时,成功节点可能会成功获取共享锁。

您可以共享相关代码吗?我更新了问题并添加了代码。