HashMap和ConcurrentHashMap的问题

来源:6-3 实现线程同步的三种方式

咖啡灌不醉

2020-04-27 21:10:47

面试当中这个问题好像非常高频,但ConcurrHashMap是怎么保证线程安全的应该怎么回答呢?是因为每个段内自己扩容还是put方法有了更多限制的原因

写回答

1回答

好帮手慕小脸

2020-04-28

同学你好,

1、锁机制是保证ConcurrentHashMap线程的安全的。

ConcurrentHashMap使用Segment(分段锁)技术,将数据分成一段一段的存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一个段数据的时候,其他段的数据也能被其他线程访问,能够实现真正的并发访问。所以说,ConcurrentHashMap在并发情况下,不仅保证了线程安全,而且提高了性能。

2、同学应先介绍在ConcurrentHashMap没有出现以前,jdk使用hashtable来实现线程安全,但是hashtable是将整个hash表锁住,所以效率很低下。

紧接着介绍ConcurrentHashMap:如下所示:

ConcurrentHashMap直接采用Node数组+链表+红黑树的数据结构实现,并发控制使用Synchronized和CAS来操作,整个看起来就像是优化过且线程安全的HashMap,虽然在JDK1.8中还能看到Segment(JDK1.7)的数据结构,但是已经简化了属性,只是为了兼容旧版本.

祝学习愉快~


1

0 学习 · 8263 问题

查看课程