HashMap不支持同步的原因
1.1 多个线程同时添加元素时,如果两个key的hash值一样,根据HashMap实现原理,这两个key会添加到数组的同一位置,这样会导致其中一个线程添加的数据被覆盖。
1.2 如果多个线程检测到HashMap元素个数超过阈值,会导致多个线程触对发HashMap的扩容,都会重新计算元素位置并且复制数据,但是最终只能有一个线程的扩容成功,其他线程都会丢失,导致各自添加的数据也会丢失。HashMap实现同步的方法
2.1 使用Conllections.synchronizedMap()方法
2.2 使用ConcurrentHashMap
2.3 对操作Map的方法实现一个对象锁
在开发过程中,首选ConcurrentHashMap,因为其不需要锁定整个对象,性能更好。