这里推荐一遍文章ConcurrentHashMap写的非常好。
产生原因
就行atomicLong出现肯定有他的原因,ConcurrentHashMap出现也是有他的原因,都知道HashMap是线程不安全的,HashTable是线程安全的,既然有个hashTable,为什么还要ConcurrentHashMap呢?
HashTable是线程安全的。但是HashTable线程安全的策略实现代价却太大了,简单粗暴,get/put所有相关操作都是synchronized的,这相当于给整个哈希表加了一把大锁,多线程访问时候,只要有一个线程访问或操作该对象,那其他线程只能阻塞,相当于将所有的操作串行化,在竞争激烈的并发场景中性能就会非常差。
这个时候就产生了另外一种锁分段锁Segment
ConcurrentHashMap分析
上图中ConcurrentHashMap是由一个segment数组组成,而每一个segment大致相当于一个hashmap,由链表+数组组成的,分段锁,顾名思义就是把锁加载segment上,这样就会一个segment加锁,而另外的segment可以正常的操作
技术永远在更新,ConcurrentHashMap你认为很快了吧,然而jdk1.8中还有更好的算法在等着你。