ConcurrentHashMap :JDK1.8版本引入, 通过把整个Map分为N个Segment,可以提供相同的线程安全,但是效率提升N倍,默认提升16倍。(读操作不加锁,由于HashEntry的value变量是 volatile的,也能保证读取到最新的值。)
Hashtable :JDK1.8以前解决线程安全问题,但效率不如ConcurrentHashMap
HashMap :线程不安全,而且在该并发会出现死锁
下面测试它们的效率,代码如下:
public class ConcurrentHashMapTest {
public static void main(String[] args) throws InterruptedException {
int threadNum = 3000;
long currentTimeMillis;
//测试HashTable 线程安全,效率低
Map<String, String> hashTable = new Hashtable<>();
currentTimeMillis = System.currentTimeMillis();
test(threadNum, hashTable);
System.out.println("测试hashTable Map的size为:" + hashTable.size() + "耗时:" + (System.currentTimeMillis() - currentTimeMillis));
//测试ConcurrentHashMap 线程安全