首页 > 其他 > 详细

ConcurrentHashMap

时间:2018-08-20 00:55:01      阅读:194      评论:0      收藏:0      [点我收藏+]

1.基本属性

1.1 sizeCtl

  • -1代表正在初始化
  • -N 表示有N-1个线程正在进行扩容操作
  • 正数或0代表hash表还没有被初始化,这个数值表示初始化或下一次进行扩容的大小,这一点类似于扩容阈值的概念。

  当表示阈值时,只等于当前容量的1.5倍加1

    // 返回一个大于等于且最接近 c 的2的幂次方整数
    private static final int tableSizeFor(int c) {
        int n = c - 1;                                                                    1001 1001 1001 1001
        n |= n >>> 1; // 将第一个1后面的值也变为1, 现在(第一个高位不为0的位置开始)从最高位开始,后面的2位都是1   将最高位(包括最高位)后面1位变为1
        n |= n >>> 2; // 将前面2位为1的后面2位也变为1, 现在从最高位开始,后面4位都是1    将最高位(包括最高位)后面2位变为1
        n |= n >>> 4; // 将前面4位为1的后面4位也变为1, 现在从最高位开始,后面8位都是1    将最高位(包括最高位)后面4位变为1
        n |= n >>> 8; // 将前面8位为1的后面8位也变为1, 现在从最高位开始,后面16位都是1    将最高位(包括最高位)后面8位变为1
        n |= n >>> 16;// 将前面16位为1的后面16位也变为1, 现在从最高位开始,后面32位都是1    将最高位(包括最高位)后面16位变为1
                      // 上面的操作就是将最高位后面的所有位变为1
        return (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + 1;
    }

 

ConcurrentHashMap

原文:https://www.cnblogs.com/virgosnail/p/9503418.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!