ConcurrentHashMap的应用场景

ConcurrentHashMap是J.U.C包里面提供的一个线程安全并且高效的HashMap,所以ConcurrentHashMap在并发编程的场景中使用的频率比较高。

ConcurrentHashMap源码分析:

ConcurrentHashMap和HashMap的实现原理是差不多的,但是因为ConcurrentHashMap需要支持并发操作。JDK1.7和Jdk1.8版本也有变化。

先说说1.7版本:
1.7 的时候,ConcurrentHashMap 采用了分段锁技术, ConcurrentHashMap是一个Segment数组,segment里面是多个HashEntry,Segment 它通过继承ReentrantLock来进行加锁,通过每次锁住一个segment来保证每个segment内的操作的线程安全性从而实现全局线程安全。所以底层还是 数组+链表结构。
1.7时候的结构图:
5分钟理解ConcurrentHashMap的原理和应用场景

1.8版本:
1.7版本解决了并发的问题,但是依然有 查询遍历链表效率太低的问题。
因此 1.8 做了一些数据结构上的调整。抛弃了原有的 Segment 分段锁,而采用了 CAS + synchronized 来保证并发安全性。也将 1.7 中存放数据的 HashEntry 改为 Node,但作用都是相同的。其中的 val next 都用了 volatile 修饰,保证了可见性。
底层数据结构采用:数组+链表+红黑树.

采用红黑树之后可以保证查询效率(O(logn)),甚至取消了 ReentrantLock 改为了 synchronized.

相关文章:

  • 2021-05-26
  • 2021-05-25
  • 2021-09-01
  • 2021-11-22
  • 2021-12-28
  • 2021-10-08
  • 2021-06-07
猜你喜欢
  • 2021-09-02
  • 2022-12-23
  • 2022-01-17
  • 2021-08-16
相关资源
相似解决方案