ClusterSlotBuilder lock疑问

// 这里的lock是不是应该去掉static,如果不同context同时进入entry,那么会出现争用, // 如果去掉,不同context之间就不会争用了,虽然只会在开始出现,但是去掉是不是更好些 private static final Object lock = new Object(); private volatile ClusterNode clusterNode = null;

@Override
public void entry(Context context, ResourceWrapper resourceWrapper, DefaultNode node, int count,
                  boolean prioritized, Object... args)
    throws Throwable {
    if (clusterNode == null) {
        synchronized (lock) {
            if (clusterNode == null) {
                  ....
            }
        }
    }
    ...
}

原提问者GitHub用户FlyRabit

展开
收起
学习娃 2023-05-19 15:27:19 101 分享 版权
1 条回答
写回答
取消 提交回答
  • 这里用static的主要目的是为了多个com.alibaba.csp.sentinel.slots.clusterbuilder.ClusterBuilderSlot 并发创建时保证只有一个clusterNode会被创建,因为clusterNode是static修饰,即是类属性,所以加锁对象不能用clusterNode的实例。而且这个锁的竞争也只会发生在第一次,在后续clusterNode被创建后,就不会去竞争锁。

    原回答者GitHub用户brotherlu-xcq

    2023-05-19 20:31:03
    赞同 展开评论
问答地址:

阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。

还有其他疑问?
咨询AI助理