先大概的说一下几个map的区别:
hashMap:读取快,插入慢,线程不安全
LinkedHashMap:读取快,插入慢
treeMap:排序
concurrentHashMap:线程安全,支持高并发的操作
当项目中的全局变量有多线程操作时需要用concurrentHashMap,若只是单线程则可以使用hashmap。
在多线程环境下使用hashMap会造成的问题:
hashMap,底层是数组+链表 结构,当两个线程同时插入需要扩容的时候,获得改map的size()大小不一样,则会报错。当有两个线程在读,第三个线程正好在对map扩容时,这两个线程就会进入死循环,cup占用率就会高。
concurrentHashMap,线程安全,读写快,底层实现是一种以空间换时间的结构,创建的时候直接分了16个segment,每个segment实际上存储的还是哈希表,写入的时候先找到对应的segment,然后对segment加锁,写完,解锁。锁segment的时候其他segment还可以继续工作。