码迷,mamicode.com
首页 > 其他好文 > 详细

ConcurrentHashMap

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

标签:32位   check   not   div   hash表   大于等于   code   现在   没有   

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

标签:32位   check   not   div   hash表   大于等于   code   现在   没有   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!