首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Node.PROPAGATE在AQS中的实际作用是什么?

Node.PROPAGATE在AQS中的实际作用是什么?
EN

Stack Overflow用户
提问于 2018-12-21 17:36:32
回答 1查看 268关注 0票数 2

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

代码语言:javascript
复制
    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;
    }
}

我的问题是在这里生成的。

EN

回答 1

Stack Overflow用户

发布于 2019-01-06 23:30:58

只能为头节点设置waitStatus值Node.PROPAGATE。仅指示头节点后继节点将传播未驻留的后继节点行为。因为当当前节点成功获取共享锁时,后续节点可能成功获取共享锁。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53882320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档