当前位置:网站首页>多线程使用哈希表
多线程使用哈希表
2022-08-03 03:18:00 【lzhNox】
多线程使用哈希表
由于HashMap本身线程不安全,所以在多线程环境下可使用
- HashTable
- ConcurrentHashMap
HashTable
虽然HashTable是线程安全的
但是相较于HashMap他只是在关键方法上加了sychronized关键字
这其实就是对Hashtable对象加锁,比如:
创建了一个实例对象,线程一要对原素1进行修改,线程二要对元素3进行修改。
他们是不能同时进行的
因为Hashtable的锁是对整个对象上锁的,所以是不允许多个线程同时对Hashtable实例对象进行操作
但是修改元素1和3是不会有线程安全问题的,他没有修改同一个变量,于是就有了以下的类
ConcurrentHashMap
ConcurrentHashMap相较于Hashtable进行了重大改进,进行了锁粒度细化,之前是一个对象一个锁,现在是一个对象的每个哈希桶都有自己的锁,也就解决了不能多线程修改不同元素的问题
ConcurrentHashMap其他优化特点:
- 读没加锁,写加锁了
- 充分运用了CAS特性,例如size属性通过CAS更新,降低了锁冲突概率
- 针对扩容场景进行了优化,之前是put操作触发了扩容就一次性完成,优化之后是put操作出发了扩容只扩容一点点
边栏推荐
猜你喜欢
随机推荐
leetcode:152. 乘积最大子数组
对话框管理器第四章:对话框消息循环
爆肝22个ES6知识点
C语言入门--指针
【obs】启动推流失败 : Output.StartStreamFailed 调用流程
C语言实验十二 指针(二)
Kotlin 乘法、我怎么越乘越小?
C语言——结构体(声明、内存对齐、自引用)、位段、联合体、枚举常量合集
Have bosses know date field flinksql is synchronized to the use of the null on how to deal with
ClickHouse uninstall and reinstall
在VScode里调试ROS程序
使用docker容器搭建MySQL主从复制
智能健身动作识别:PP-TinyPose打造AI虚拟健身教练!
金仓数据库 Pro*C 迁移指南( 4. KingbaseES 的 Pro*C 迁移指南)
工作两年成跳槽高峰期,程序员会在一家公司待多久?
ClickHouse delete table
MySQL-Explain详解
370万欧元!西班牙iPronics加速可重构光子芯片商用
ClickHouse—入门
金仓数据库 MySQL 至 KingbaseES 迁移最佳实践(3. MySQL 数据库移植实战)








