ConcurrentHashMap的使用场景

匿名 (未验证) 提交于 2019-12-03 00:19:01

先大概的说一下几个map的区别:

hashMap:读取快,插入慢,线程不安全

LinkedHashMap:读取快,插入慢

treeMap:排序

concurrentHashMap:线程安全,支持高并发的操作

当项目中的全局变量有多线程操作时需要用concurrentHashMap,若只是单线程则可以使用hashmap。

在多线程环境下使用hashMap会造成的问题:

hashMap,底层是数组+链表 结构,当两个线程同时插入需要扩容的时候,获得改map的size()大小不一样,则会报错。当有两个线程在读,第三个线程正好在对map扩容时,这两个线程就会进入死循环,cup占用率就会高。

concurrentHashMap,线程安全,读写快,底层实现是一种以空间换时间的结构,创建的时候直接分了16个segment,每个segment实际上存储的还是哈希表,写入的时候先找到对应的segment,然后对segment加锁,写完,解锁。锁segment的时候其他segment还可以继续工作。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!