方法 | 示例 | 原理 | 性能 |
HashTable | Map<String, Object> map = new Hashtable(); | synchronized修饰get/put方法。属于方法级别的阻塞。 | 很差 |
Collections.synchronizedMap | Map<String, Object> map = Collections.synchronizedMap(new HashMap<String, Object>()); | 内部公用mutex对象,对mutex对象加锁 | 很差 |
JUC的ConcurrentHashMap | Map<String, Object> map = new ConcurrentHashMap<>(); | 每次只给一个桶(数组项)加锁 | 很好 |
ConcurrentSkipListMap
ConcurrentSkipListMap是在JDK1.6中新增的,为了对高并发场景下的有序Map提供更好的支持。
特点(1)适用于高并发场景。(2)key是有序的。(3)基于跳表结构(Skip List)实现,查询、插入、删除的时间复杂度都是O(logn)。(3)key和value都不能为null。