前言 哈希表的组织形式是这样的:
对于哈希表这种重要而又频繁被使用的数据结构,是否线程安全往往是人们经常考虑的方向之一。
一、HashTable HashTable是线程安全的。但是它的线程安全在于它的关键方法都使用了synchronized,比如get方法、put方法,这就会导致它的并发程度低下。它就是相当于给整个哈希表使用一把锁:
二、HashMap HashMap是线程不安全的哈希表,当我们不需要考虑线程安全问题时,HashMap无疑是最优选择。
ConcurrentHashMap 是线程安全的hash表。给每个哈希桶安排了一把锁:
ConcurrentHashMap的改进:
渐进式扩容:
在Java8之前,ConcurrentHashMap 进行了锁分段技术:
目的是为了降低锁竞争的概念(Java8之前的概念)。