AbstractQueuedSynchronizer中共享模式的原理

时间:2017-06-28 03:34:15

标签: java concurrency

在AbstractQueuedSynchronizer(AQS)中学习共享模式代码的过程中,我有一个问题,我无法理解setHeadAndPropagate中的以下代码:

if (propagate > 0 || h == null || h.waitStatus < 0) {
            Node s = node.next;
            if (s == null || s.isShared())
                doReleaseShared();
        }

“h”是老头,为什么要用旧头检查?

1 个答案:

答案 0 :(得分:0)

如果state等于0并且之前没有队列在队列中,或者如果先前排队的节点是0或CANCELLED,则无需唤醒后继者。