ConcurrentHashMap
继承自AbstractMap
类(AbstractMap实现了Map接口),用来替换其他线程安全的Map容器。例如:
Hashtable
和Collections.synchronizedMap(new HashMap<String,String>())
;
另外,说到ConcurrentHashMap
就不能不提一下Hashtable
和HashMap
,下边做一下对比:
Hashtable
是一个线程安全的Map类,其实现了Map
接口。
Hashtable是Java中比较老的Map类,自JDK1.0版本就存在了,其公有方法均使用synchronize
关键字修饰,这表示在多线程操作时,每个线程在操作之前都会锁住整个map,待操作完成后才释放,这必然导致多线程时性能不佳;
Hashtable不能使用null作为key或者value ;HashMap
不是线程安全的Map类 ,继承自AbstractMap
类
HashMap是Java中最常用的一个Map类了,单线程运行时 性能好、速度快;
HashMap可以使用null作为key或者value;ConcurrentHashMap
使用多segment
并发技术,使得并发操作时往往不需要锁住整个map,其多线程性能远超Hashtable;
ConcurrentHashMap不能使用null作为key或者value;
使用
ConcurrentHashMap<String, String> mMap = new ConcurrentHashMap<String, String>();
mMap.put("1", "TP");
mMap.get("1");
参考:
https://zhuanlan.zhihu.com/p/28618718
https://my.oschina.net/hosee/blog/639352