线程安全的Map合集---不只有ConcurrentHashMap和Hashtable
分享
线程安全的Map有哪些呢?
Hashtable
Hashtable是jdk遗留下来的工具类,简单暴力,把线程不安全的方法全部加上了synchronized,因此肯定是线程安全的。但是他相对于HashMap还是有自己很多的特点的,例如:
1、如果构造方法指定了容量,就是指定的容量,不会像HashMap取2的幂。
2、默认初始大小为11,扩容大小为2倍+1
3、取模不是用的位运算,而是模运算
4、key和value都不能为null,如图:(null.hashcode()会抛出空指针异常)
ConcurrentHashMap
通过了cas操作和synchronized进行优化,加锁单位是hash表中的一个节点,因此效率很高。其他部分和HashMap还是很像的。
ConcurrentSkipListMap
这个准确的说和HashMap还是有点不太相同的,这里实现的Map是有序的,底层如同他的名字一样,采用的是跳表的数据结构