当前位置:网站首页>多线程使用哈希表
多线程使用哈希表
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操作出发了扩容只扩容一点点
边栏推荐
- Go新项目-编译项目的细节(4)
- Jincang Database OCCI Migration Guide (5. Program Development Example)
- 金仓数据库 Pro*C 迁移指南(3. KingbaseES Pr*oc 对 Oracle Pro*c 的兼容)
- MySQL-如何分库分表?一看就懂
- 对话框管理器第四章:对话框消息循环
- Pro_07丨波动率因子3.0与斜率因子
- 关于 Redis 必问面试题,你知道哪些?
- 【GraphQL】使用Hot Chocolate和.NET 6构建GraphQL应用
- Have bosses know date field flinksql is synchronized to the use of the null on how to deal with
- (一)Nacos注册中心集群环境搭建
猜你喜欢
随机推荐
重定向printf到USB CDC、串口2
【剑指offer】——16.数值的整数次方
Guys, I don't understand a bit: why the documentation of oracle-cdc writes that the connector can be done exactly-o
智能健身动作识别:PP-TinyPose打造AI虚拟健身教练!
ClickHouse卸载、重安装
Jincang Database Pro*C Migration Guide (3. KingbaseES Pr*oc Compatibility with Oracle Pro*c)
(一)Nacos注册中心集群环境搭建
leetcode:140. 单词拆分 II
记录学习--Navicat使用自定义数据库列表
思维+启发式合并
leetcode:149. 直线上最多的点数
leetcode:139. 单词拆分
黑马程序员Servlet
Sentinel vs Hystrix 限流对比,到底怎么选?
2022-08-01 顾宇佳 学习笔记
sql问题,如何能做到先声明表的名称,例如product202201,表示2022年一月份的货物表,再在声明过的表中查找,下面的代码运行时有错误显示找不到表table_name,请问改如何进行修改
第三方支付--分账对接
log4j设置日志的时区
370万欧元!西班牙iPronics加速可重构光子芯片商用
【动态规划--01背包】HJ16 购物单