ConcurrentHashMap 分段锁

ConcurrentHashMap 继承自AbstractMap类(AbstractMap实现了Map接口),用来替换其他线程安全的Map容器。例如:
HashtableCollections.synchronizedMap(new HashMap())

另外,说到ConcurrentHashMap就不能不提一下HashtableHashMap,下边做一下对比:

  • 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

你可能感兴趣的:(Java源码,数据结构)