HashMap是线程不安全的,具体原因可以参考文章:HashMap线程不安全性
那么若我们想要在多线程情况下使用HashMap应该怎么办呢?
下面给出三种方案:
HashTable
和HashMap原理相同,但是是线程安全的,与HashMap的最大区别是HashMap的Key和Value可以为null,但是HashTable的Key和Value都不能为null。
但是HashTable是遗留类,最好不要使用。
ConcurrentHashMap
Concurrent并发包下的类,采用了分段锁,是线程安全的,每个分段锁维护着几个桶,多个线程可以同时访问不同分段锁上的桶,使并发度更高。默认并发级别为16。
Collections.synchronizeMap()
使用Collections.synchronizeMap(map) 方法可以返回一个线程安全的Map。