欢迎光临
我们一直在努力

ConcurrentHashMap

 ConcurrentHashMap

HashMap

基本特点: 双列集合,键不能重复(只有一个key为null),值可以重复。

数据结构:由哈希表(数组),链表和红黑树组成。

put()方法源码分析 

hash() 

 putVal()

重点参数 

哈希表长度默认是16

哈希表每次扩容原来 2

哈希表的负载因子 0.75

链表长度上限是 8

当元素数量超过 容量×负载因子 时触发扩容,哈希表不会装满,装满会影响查询效率,所以会牺牲一定的空间而换取查询效率。

将链表转为红黑树不一定转成功, 还会判断哈希表长度,当哈希表长度小于64会先扩容哈希表,扩容后所有元素位置需要重新计算,这样链表会变短,只有当链表长度大于等于8且哈希表长度大于64,链表才会转成红黑树

当红黑树节点数量减少为6个时,红黑树退化成链表。

ConcurrentHashMap

ConcurrentHashMap是一个线程安全的map,加锁的方式与Hashtable不同,Hashtable直接在方法上加锁,一次只能有一个线程进入方法操作,ConcurrentHashMap不是给方法加的锁,而是给每个哈希表中的位置加锁。

ConcurrentHashMap 不支持存储 null 键和 null 值。

CopyOnWriteArrayList 

ArraayList 是线程不安全的,CopyOnWriteArrayList是线程安全的 ArrayList 实现。其使写入不会阻塞读取操作,只有写入和写入之间需要进行同步等待,读操作的性能得到大幅度提升。适合读多写少的场景。

CopyOnWriteArrayList类的所有可变操作(add,set 等等)都是通过创建底层数组的新副本来实现的。当 List 需要被修改的时候,并不直接修改原有数组 对象,而是对原有数据进行一次拷贝,将修改的内容写入副本中。写完之后,再将修改完的副本替换成原来的数据,这样就可以保证写操作不会影响读操作了。

赞(0)
未经允许不得转载:171主机测评 » ConcurrentHashMap
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址