一文讲解HashMap线程安全相关问题(下)
接上一篇,我们知道了HashMap是线程不安全的,那么有什么办法可以解决HashMap线程不安全的问题呢?
①、Hashtable 是直接在方法上加synchronized关键字,比较粗暴,因此在Java的后期版本中,更推荐使用ConcurrentHashMap和Collection.synchronizedMap(Map)包装器;
②、Collections.synchronizedMap
返回的是 Collection工具类的内部类。
内部是通过synchronized对象锁来保证线程安全的;
③、ConcurrentHashMap 在 JDK 7 中使用了分段锁来保证线程安全,在 JDK 8 中使用了CAS(也就是Compare-And-Swap)+synchronized关键字;