java concurrenthashmap和hashmap的区别

 我来答
育知同创教育
2016-07-20 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
展开全部
最大的区别就是ConcurrentHashMap是线程安全的,hashMap不是线程安全的。
为什么线程安全呢:
ConcurrentHashMap代码中可以看出,它引入了一个“分段锁”的概念,具体可以理解为把一个大的Map拆分成N个小的HashTable,根据key.hashCode()来决定把key放到哪个HashTable中。
在ConcurrentHashMap中,就是把Map分成了N个Segment,put和get的时候,都是现根据key.hashCode()算出放到哪个Segment中:
黑马程序员
2018-07-06 · 改变中国IT教育,我们正在行动
黑马程序员
黑马程序员为大学毕业后,有理想、有梦想,想从事IT行业的年轻人改变自己的命运。黑马程序员成就IT黑马
向TA提问
展开全部
1、ConcurrentHashMap对整个桶数组进行了分段,而HashMap则没有
2、ConcurrentHashMap在每一个分段上都用锁进行保护,从而让锁的粒度更精细一些,并发性能更好,而HashMap没有锁机制,不是线程安全的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
应琼华0gb
2016-07-20 · TA获得超过222个赞
知道小有建树答主
回答量:492
采纳率:50%
帮助的人:215万
展开全部
即使是线程安全的集合,使用iterator()进行迭代都是不安全的,必须手动地进行同步,下面是JavaDoc的说明:Itisimperativethattheusermanuallysynchronizeonthereturnedmapwheniteratingoveranyofitscollectionviews:Mapm=Collections.synchronizedMap(newHashMap());Sets=m.keySet();//Needn'tbeinsynchronizedblocksynchronized(m){//Synchronizingonm,nots!Iteratori=s.iterator();//Mustbeinsynchronizedblockwhile(i.hasNext())foo(i.next());}如果不使用同步块进行迭代,当在迭代时,如果存在另外一个线程对集合进行删除或者添加元素,则会报ConcurrentModificationException
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式