美文网首页
ConrrentHashMap Size()解释

ConrrentHashMap Size()解释

作者: 青城楼主 | 来源:发表于2018-07-31 07:35 被阅读135次

    1.7 size() 首先CAS比较下当前获取的分段锁所获取总数量 是否等于用于监控数量,、是的话每人等,开始就直接统计了
    2,如果不相等的话 就锁着所有的segment 的读和写,开始统计

    1.8size()
    定义了一个全局的数组 counterCells[] ,couterCells 是个内部类,有一个valitle的value变量,构造函数把valitle传进去!

    public int size() {
    long n = sumCount();
    return ((n < 0L) ? 0 :
    (n > (long)Integer.MAX_VALUE) ? Integer.MAX_VALUE :
    (int)n);
    }

    final long sumCount() {
    CounterCell[] as = counterCells; CounterCell a;
    long sum = baseCount;
    if (as != null) {
    for (int i = 0; i < as.length; ++i) {
    if ((a = as[i]) != null)
    sum += a.value;
    }
    }
    return sum;
    }

    所以counterCells存储的都是value为1的CounterCell对象,而这些对象是因为在CAS更新baseCounter值时,由于高并发而导致失败,最终将值保存到CounterCell中,放到counterCells里。这也就是为什么sumCount()中需要遍历counterCells数组,sum累加CounterCell.value值了

    相关文章

      网友评论

          本文标题:ConrrentHashMap Size()解释

          本文链接:https://www.haomeiwen.com/subject/imwqvftx.html