Java Node.PROPAGATE在AQS中的实际角色是什么?
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
节点的节点.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节点设置。仅指示头节点的成功节点将传播未解析成功节点行为。因为当当前节点成功获取共享锁时,成功节点可能会成功获取共享锁。您可以共享相关代码吗?我更新了问题并添加了代码。