去面试的时候面试官问到了hashMap是不是线程安全的,答案是:线程不安全,因为,,,,,
接着问:怎么样使它的线程安全?
当时万籁俱寂,,,,,
回来查查资料如下:
1.HashTable
Map<String, String> hashtable = new Hashtable<>();
HashTable使用synchronized来保证线程安全的,所有线程竞争同一把锁,效率低
2.ConcurrentHashMap
Map<String, String> concurrentHashMap = new ConcurrentHashMap<>();
使用锁分段技术:它包含一个segment数组,将数据分段存储,给每一段数据配一把锁,效率高
Java8中使用CAS算法
3.Synchronized Map
Map<String, String> synchronizedHashMap = Collections.synchronizedMap(new HashMap<String, String>());
调用synchronizedMap()方法后会返回一个SynchronizedMap类的对象,而在SynchronizedMap类中使用了synchronized同步关键字来保证对Map的操作是安全的。