关于ConcurrentHashMap的初步认识

            根据码码在线老哥们面试情况来看,ConcurrentHashMap是面试中必考的知识点,所以在此对它进行些许了解,以便实习面试时不会太难堪。

            ConcurrentHashMap,这个东西是1.5以后出现的,在java.util.concurrent包下的.先了解HashMap,HashTable,Synchronized,Lock等技术点后我们才能进一步学习ConcurrentHashMap。

            HashMap的数据结构是Node[]数组 + 链表结构.对应的有HashTable,一定程度上等同于HashMap.HashMap和HashTable都实现了Map接口.HashMap因为不是同步的,所以会有线程安全问题,而HashTable是同步的所以线程安全.当然的,在单线程操作下,HashMap的效率比HashTable要高. 

            HashTable是通过Synchroinzed来保证线程安全,副作用是一次只能有一个线程去修改HashTable,必须先获得其同步锁才能进行修改,其他线程必须等待锁被释放之后才能获得执行权去修改HashTable.所以一般在多线程情况下,hashtable并不是最优选择。1.5以后出现的ConcurrentHashMap,解决了HashTabe安全但效率低,HashMap效率高但不能保证线程安全的毛病。

         Lock,这个类实现了Lock接口是1.5以后出现的一种锁,相比较Synchronized这种同步锁而言ReentrantLock更加灵活.Synchronized是互斥的,而ReentrantLock作用类似于Synchronized,但是不用和Synchronized一样在获取锁的时候必须等待,可以设置轮询,定时,中断,在多个锁的情况下可以避免死锁.

           ConcurrentHashMap, 一个Segment[]数组上挂了一堆HashEntry,而HashEntry的数据结构也是K->V结构,HashEntry中有entries[]数组,数组的index对应的是链表结构. Segment[]t是ConcurrentHashMap中维护的一个静态内部类。

               大致数据结构如图所示


初步认识到这里,但应对面试还远远不够,后面还有get set等源码就等以后慢慢研究了。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值