当前位置:网站首页>多线程使用哈希表
多线程使用哈希表
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操作出发了扩容只扩容一点点
边栏推荐
- 2022-08-01 顾宇佳 学习笔记
- 如何画一张架构图(内含知识图谱)
- Guys, I don't understand a bit: why the documentation of oracle-cdc writes that the connector can be done exactly-o
- 密码学的基础:X.690和对应的BER CER DER编码
- Methods annotated with ‘@Async‘ must be overridable
- 记录学习--Navicat使用自定义数据库列表
- Jincang Database Pro*C Migration Guide ( 5. Program Development Example)
- js的组成及js样式
- SqlSession [[email protected]]
- 【原创】Auto.js get和post 案例
猜你喜欢
随机推荐
Chapter 8 Character Input Output and Input Validation
【数据分析】基于MATLAB实现SVDD决策边界可视化
QT添加资源文件、样式表、qss文件使用
C语言实验十三 指针(三)
05-分布式计算框架
QT之鼠标和键盘事件重写
iScroll系列之下拉刷新 + 上拉加载更多
Summary of some questions about the grain mall
leetcode:153. 寻找旋转排序数组中的最小值
15【背景 渐变色】
Dynamically modify the title of the navigation bar in uniapp
ClickHouse—入门
【leetcode热题Hot100】——LRU缓存
SPI机制是什么?
Useful Monitoring Scripts What you want part1 in Oracle
关于 Redis 必问面试题,你知道哪些?
Jincang Database OCCI Migration Guide (5. Program Development Example)
C语言实验十一 指针(一)
ClickHouse卸载、重安装
网工知识角|华为网络工程师,华为、华三、思科设备三层交换机如何使用三层接口?命令敲起来