ConcurrentHashMap是怎么实现的?什么是ConcurrentHashMap?

ConcurrentHashMap是线程安全且高效的HashMap,能够保证线程安全的同时又能保证高效的操作。那ConcurrentHashMap是怎么实现的?下面来我们就来给大家讲解一下这方面的内容。

众所周知,哈希表是中非常高效,复杂度为O(1)的数据结构,在Java开发中,我们最常见到最频繁使用的就是HashMap和HashTable,但是在线程竞争激烈的并发场景中使用都不够合理。

HashMap :先说HashMap,HashMap是线程不安全的,在并发环境下,可能会形成环状链表(扩容时可能造成,具体原因自行百度google或查看源码分析),导致get操作时,cpu空转,所以,在并发环境中使用HashMap是非常危险的。

ConcurrentHashMap是怎么实现的?什么是ConcurrentHashMap?.png

HashTable : HashTable和HashMap的实现原理几乎一样,差别无非是1.HashTable不允许key和value为null;2.HashTable是线程安全的。但是HashTable线程安全的策略实现代价却太大了,简单粗暴,get/put所有相关操作都是synchronized的,这相当于给整个哈希表加了一把大锁,多线程访问时候,只要有一个线程访问或操作该对象,那其他线程只能阻塞,相当于将所有的操作串行化,在竞争激烈的并发场景中性能就会非常差。


1.png

HashTable性能差主要是由于所有操作需要竞争同一把锁,而如果容器中有多把锁,每一把锁锁一段数据,这样在多线程访问时不同段的数据时,就不会存在锁竞争了,这样便可以有效地提高并发效率。这就是ConcurrentHashMap所采用的"分段锁"思想。

什么是ConcurrentHashMap?

ConcurrentHashMap 是java集合中map的实现,是哈希表的线程安全版本,即使是线程安全版本,ConcurrentHashMap的性能也十分可观。但是在不同的jdk版本中,其实现也不一样,本文主要基于jdk1.8版本的实现讨论。ConcurrentHashMap 是线程安全且高效的HashMap。

在多线程环境下,使用HashMap 进行put操作会引起死循环,单ConcurrentHashMap 的锁分段技术可有效提升并发访问率。最后大家如果想要了解更多java常见问题知识,敬请关注奇Q工具网。

推荐阅读:

jcreator怎么配置jdk?jcreator配置jdk教程

java没有main方法可以运行吗?main有什么作用?

Java原子类AtomicInteger实现原理是什么?原理讲解