面试官:说一下currenthashmap怎么保证并发正确

举报
知识浅谈 发表于 2022/08/17 09:15:32 2022/08/17
【摘要】 面试官:说一下currenthashmap怎么保证并发正确

JDK1.7 的concurrentHashMap

结构:JDK1.7版本的concurrentHashMap和JDK1.7的hashmap的结构的区别就是加上了一层segment数组,当然加上这个数组也是为了并发时候的安全性,所以其结构就是segment数组+数组+链表的结构,每个segment中的有一个数组+链表的结构,初始的大小为16,阈值也是0.75。

安全机制:

对于jdk1.7的concurrenthashmap的安全性,是通过synchronized加在segment数组上来保证的,也就是我们常说的段锁,对于一个段加锁之后,这个段上其他的节点就不能被操作了,但是一个段上加锁之后,并不影响其他段的操作,所以就在安全的环境下大大提高了并发性。

 

JDK1.8的concurrentHashMap

结构和安全机制

JDK1.8版本的concurrentHashMap和JDK1.8的hashmap的结构的区别就是使用了synchronized和CAS机制,当然加上synchronized和CAS机制也是为了并发时候的安全性,所以主要是操作的时候加上了锁的影响,在添加数据的时候会先对指定的节点加上Synchronized锁,然后在进行CAS方式插入数据,因为Synchronized锁的是数组中的一个几点而不是整个数组,所以并发也很高,初始的大小为16,阈值也是0.75。

注意:JDK1.8的concurrentHashMap扩容特点:多线程并行扩容,因为synchronized所得是单个节点,所以可以多个线程并行扩容,暴增安全的前提下提高了扩容的速度,其次统计数量的时候如果并发较高可以使用数组统计之后,把数组中的都加到一起。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。