ConcurrentHashMap是java.util.concurrent
Java并发包下的.为了解决在高并发情况下的HashMap可能会出现死循环等问题而诞生的.实际上就是一个线程安全的HashMap
1.结构
在1.7的时候结构是:
从上面的结构我们可以了解到,ConcurrentHashMap定位一个元素的过程需要进行两次Hash操作,第一次Hash定位到Segment,第二次Hash定位到元素所在的链表的头部,因此,这一种结构的带来的副作用是Hash的过程要比普通的HashMap要长,但是带来的好处是写操作的时候可以只对元素所在的Segment进行加锁即可,不会影响到其他的Segment,这样,在最理想的情况下,ConcurrentHashMap可以最高同时支持Segment数量大小的写操作(刚好这些写操作都非常平均地分布在所有的Segment上),所以,通过这一种结构,ConcurrentHashMap的并发能力可以大大的提高。
在1.8之后放弃了臃肿的Segment而和HashMap的结构一致了:
2.锁机制
这里先简单介绍一下各种锁,以便下文讲到相关概念时能有个印象。
(1)synchronized
jav