在AbstractQueuedSynchronizer(AQS)中学习共享模式代码的过程中,我有一个问题,我无法理解setHeadAndPropagate中的以下代码:
if (propagate > 0 || h == null || h.waitStatus < 0) {
Node s = node.next;
if (s == null || s.isShared())
doReleaseShared();
}
“h”是老头,为什么要用旧头检查?
答案 0 :(得分:0)
如果state
等于0并且之前没有队列在队列中,或者如果先前排队的节点是0或CANCELLED
,则无需唤醒后继者。