Android ConcurrentHashMap

1.ConcurrentHashMap

无论是1.7还是1.8,都能看出JDK没有对HashMap做任何的同步操作,所以并发会出问题,甚至 1.7 中出现死循环导致系统不可用(1.8 已经修复死循环问题)。因此JDK推出了ConcurrentHashMa,专门用于解决并发问题。

ConcurrentHashMap同样也分为1.7 、1.8版,两者在实现上略有不同。

 

2.Base 1.7

先来看看 1.7 的实现,下面是他的结构图:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5a2f6Iqz6Iqz,size_19,color_FFFFFF,t_70,g_se,x_16

ConcurrentHashMap由Segment数组(segment:段、部分)和HashEntry组成,和HashMap一样,仍然是数组加链表。

它的核心成员变量:

final Segment<K,V>[] segments; //Segment数组,存放数据时首先需要定位到具体的Segment中

transient Set<K> keySet;

transient Set<Map.Entry<K,V>> entrySet;

Segment是ConcurrentHashMap的一个内部类,主要的组成如下:

static final class Segment<K,V> extends ReentrantLock implements Serializable {

       private static final long serialVersionUID = 2249069246763182397L;

       transient volatile HashEntry<K,V>[] table; //和HashMap中的HashEntry作用一样,真正存放数据的桶

       transient int count;

       transient int modCount;

       transient int threshold;

       final float loadFactor;

}

HashEntry的组成:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5a2f6Iqz6Iqz,size_20,color_FFFFFF,t_70,g_se,x_16

 和HashMap非常类似&#x

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值