jdk1.7和jdk1.8hashmap的区别 concurrenthashmap的区别

看完了整个 HashMap 和 ConcurrentHashMap 在 1.7 和 1.8 中不一样的实现方式相信你们对他们的理解应该会更加到位。html

其实这块也是面试的重点内容,一般的套路是:git

  1. 谈谈你理解的 HashMap,讲讲其中的 get put 过程.
    1. 1源码有.不坐过多解释:
    2. 存取方式 1.7 数组+链表。1.8数组+链表+红黑树。 
  2. 1.8 作了什么优化?
    1. 主要作了链表遍历的优化-->改成红黑树遍历。
    2. concurrentHashMap 是同理:  分段锁 修改成 abs 和 syn
  3. 是线程安全的嘛?
    1. hashMap 都不是线程安全的
    2. concurrenthashmap是
  4. 不安全会致使哪些问题?
    1. 致使读取的数据不对撒
    2. 举例看文章
  5. 如何解决?有没有线程安全的并发容器?
    1. 加锁撒
    2. concurrenthashmap就能解决  --底层是 对segment加了分段锁  ,1.8修改成 abs和syn put值
  6. ConcurrentHashMap 是如何实现的? 1.七、1.8 实现有何不一样?为何这么作?
    1. 对数据加了volition 对全部数据在内存中都是可见的。  
    2. 1.7是对segment实行分段所 和自旋锁--数组+链表。
    3. 1.8是对实行了abs和syn原子操做---数组+链表+红黑树-- 优先红黑树  。
    4. 链表的时间复杂度是 o(N)  红黑树是o(logN)

这一串问题相信你们仔细看完都能怼回面试官。github

除了面试会问到以外平时的应用其实也蛮多,像以前谈到的 Guava 中 Cache 的实现就是利用 ConcurrentHashMap 的思想。面试

同时也能学习 JDK 做者大牛们的优化思路以及并发解决方案。数组

参考资料:https://www.cnblogs.com/fsychen/p/9361858.html安全

参考资料git:https://github.com/crossoverJie/JCSprout并发