首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

ConcurrentHashMap源码(二)

return sum; } (1)元素的个数依据不同的线程存在在不同的段里; (2)计算CounterCell所有段及baseCount的数量之和; (3)获取元素个数没有加锁; 总结 (1)ConcurrentHashMap...是HashMap的线程安全版本; (2)ConcurrentHashMap采用(数组 + 链表 + 红黑树)的结构存储元素; (3)ConcurrentHashMap相比于同样线程安全的HashTable...,效率要高很多; (4)ConcurrentHashMap采用的锁有 synchronized,CAS,自旋锁,分段锁,volatile等; (5)ConcurrentHashMap中没有threshold...元素个数的更新如果还是出现多个线程同时更新一个段,则会扩容段(CounterCell); (17)获取元素个数是把所有的段(包括baseCount和CounterCell)相加起来得到的; (18)查询操作是不会加锁的,所以ConcurrentHashMap...不是强一致性的; (19)ConcurrentHashMap中不能存储key或value为null的元素; ConcurrentHashMap中有哪些值得学习的技术呢?

66120

ConcurrentHashMap源码分析

一:简述 本文基于jdk1.8对concurrentHashMap的源码进行分析,以put()方法为入口对concurrentHashMap的扩容机制,size计算方式等代码进行分析 二:concurrentHashMap...的size时需要加cas锁的标记 private transient volatile int cellsBusy; //用于计算concurrentHashMap的size 默认长度是2 private...transient volatile CounterCell[] counterCells; 三:concurrentHashMap的源码分析 以put方法为入口对源码进行分析 1.put方法流程图...在扩容的时候设计的非常巧妙,当其他线性调用api的是否如果发现concurrentHashMap正在扩容,会调用helpTransfer方法协助数据的迁移,提高扩容的效率。...的操作的时候,如果发现concurrentHashMap正在扩容,那么会调用helpTransfer协助扩容 final Node[] helpTransfer(Node[] tab

37720

ConcurrentHashMap使用示例

作者:mononite 链接:https://my.oschina.net/mononite/blog/144329(点击文末阅读原文前往) ConcurrentHashMap通常只被看做并发效率更高的...举个例子:统计文本中单词出现的次数,把单词出现的次数记录到一个Map中,代码如下: private final Map wordCounts = new ConcurrentHashMap...)操作,很简单,但非常有用,下面的代码用ConcurrentMap解决上面问题: private final ConcurrentMap wordCounts = new ConcurrentHashMap...下面的代码演示了怎么处理这种情况: private final ConcurrentMap> cache = new ConcurrentHashMap...最后再补充一下,如果真要实现前面说的统计单词次数功能,最合适的方法是Guava包中AtomicLongMap;一般使用ConcurrentHashMap,也尽量使用Guava中的MapMaker或cache

2.5K90
领券