JDK1.8 ConcurrentHashMap的size

白玉 IT哈哈
旧版本方法,和推荐的mappingCount返回的值基本无区别

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

这个方法是从JDK1.2版本开始就有的方法了。而ConcurrentHashMap在JDK1.8版本中还提供了另外一种方法可以获取大小,这个方法就是mappingCount。

public long mappingCount() {        long n = sumCount();        return (n < 0L) ? 0L : n; // ignore transient negative values}

根据mappingCount()方法头上的注释,我们可以得到如下的信息:
1、这个应该用来代替size()方法被使用。这是因为ConcurrentHashMap可能比包含更多的映射结果,即超过int类型的最大值。
2、这个方法返回值是一个估计值,由于存在并发的插入和删除,因此返回值可能与实际值会有出入。
虽然注释这么才说使用mappingCount来代替size()方法,但是我们比较两个方法的源码你会发现这两个方法的源码基本一致。
在size()方法和mappingCount方法中都出现了sumCount()方法,因此,我们也顺便看一下。
在size()方法和mappingCount方法中都出现了sumCount()方法,因此,我们也顺便看一下。

    // Table of counter cells. When non-null, size is a power of 2    private transient volatile CounterCell[] counterCells;    //ConcurrentHashMap中元素个数,基于CAS无锁更新,但返回的不一定是当前Map的真实元素个数。    private transient volatile long baseCount;/**     * A padded cell for distributing counts.  Adapted from LongAdder     * and Striped64.  See their internal docs for explanation.     */    @sun.misc.Contended static final class CounterCell {        volatile long value;        CounterCell(long x) { value = x; }    }    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;    }

更多相关文章

  1. 使用 ThreadLocal 变量的时机和方法
  2. clone 方法是如何工作的
  3. VS中scanf等函数报错解决方法
  4. jQuery编程基础精华02(属性、表单过滤器,元素的each,表单选择器,子元
  5. jQuery的$.getJSON方法在IE浏览器下失效的解决方案
  6. JavaScript / jQuery:如何链接使用console.log()的方法
  7. 在体html中搜索文本的最佳方法是什么?
  8. jQuery 事件绑定方法(bind hover toggle live.... )、删除事件方法
  9. jQuery Ajax 方法调用 Asp.Net WebService

随机推荐

  1. android listView实现单选
  2. android触屏手势识别全解析
  3. Android 获取系统权限的代码
  4. Difference of px, dp, dip and sp in an
  5. CheckBox自定义
  6. android给view比如layout等添加阴影效果
  7. ScrollView嵌套RecyclerView冲突解决
  8. Android(安卓)Intent调用大全
  9. Android(安卓)binder 原理及实现机制
  10. Android 编译提示R文件找不到