社区
高性能WEB开发
帖子详情
两个线程同时操作一个map,怎么保证数据安全?
ghjvbng
2017-08-28 11:18:51
A类中用的是concurrentHashMap,这个对象用来保存一些信息,用户需要时会使用A类中的一些方法查询这个map中的信息,而B类是一个可以理解为守护线程的线程在做清理工作,每个一段时间会拿到A类中的map并清理这个map中满足清理条件的信息,也就是一个查询,一个删除,如何同步,在A类中查询的方法用synchronized修饰,B类中将拿到map作为锁吗?
...全文
3228
3
打赏
收藏
两个线程同时操作一个map,怎么保证数据安全?
A类中用的是concurrentHashMap,这个对象用来保存一些信息,用户需要时会使用A类中的一些方法查询这个map中的信息,而B类是一个可以理解为守护线程的线程在做清理工作,每个一段时间会拿到A类中的map并清理这个map中满足清理条件的信息,也就是一个查询,一个删除,如何同步,在A类中查询的方法用synchronized修饰,B类中将拿到map作为锁吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
安优小青和他的程序生活
2017-09-04
打赏
举报
回复
我觉的还要看你的实际代码说话,concurrentHashMap也不是万能的。 在有的情况也的加锁: 比如这个:http://blog.csdn.net/sadfishsc/article/details/42394955
littlebrain4solving
2017-08-29
打赏
举报
回复
据我所知,在一个进程内ConcurrentHashMap当某个数据节点操作之前都会使用互斥锁进行保证数据的一致性,所以这方面你不用担心;具体可以查看ConcurrentHashMap源码的1027行与1117行;如果你使用了分布式的话,那就需要利用缓存K/V存储进行锁控制了。
小莫分享
2017-08-28
打赏
举报
回复
查询完,把key写入一个队列,B去拿就好了
java基础教程----精华版
java基础教程----精华版,不得不下载的资源
多
线程
问题--同
一个
Map
传入多个
线程
中,导致
Map
被修改,造成
线程
安全问题
创建
一个
Map
<String, String>
map
= new Hash
Map
<>();
map
.put("a","aValue"); 此时有
两个
线程
A,B,将
map
通过构造方法传入
线程
中 A没有对
map
做修改,B向
Map
中添加字段或更改字段 如果通过
线程
池创建并执行这
两个
线程
任务 此时,由于这
两个
线程
在同
一个
进程中,因此共用一块内存空间, 因此此时
两个
线程
中的this.
map
指向的是同
一个
对象,所以,其中任意
一个
线程
对
map
有更改,则会影响到另外
一个
线程
。
hash
Map
线程
安全
线程
安全问题: 1、因为如果
两个
线程
同时进行插入
操作
,当A
线程
在通过hash碰撞的判断之后,此时进入到B
线程
进行了插入
操作
,当B
线程
执行完毕后由于A
线程
已经进行过hash碰撞判断所以可能会导致A
线程
数据将B
线程
数据覆盖。 2、当多
线程
同时检测到
map
数组需要进行扩容
操作
时,多条
线程
会同时进行数组扩容hash计算,但最终只会有
一个
线程
会把扩容后的数组返回给
map
,但是由于多
线程
在计算过程中每个hash会更改,则会导致死循环 需要
线程
安全的
map
则选用hashTable
Map
(get、put是同步的,同时只能有
Map
在多
线程
中使用
背景: 在实际
操作
中经常会遇到一种场景,我们需要用
一个
成员属性
Map
来保存信息,这时我们可能起
两个
线程
甚至更多,
一个
线程
用来给
Map
装值,另外
一个
线程
用来每隔一段时间就去
Map
那取值并清空
Map
。 实现: 根据上面场景需求,很简单,刷刷刷...,代码写好了,main thread用来给
Map
装东西,TimeTask thread用来取
Map
里面的东西 public c
c++ 中 设计
一个
线程
安全的
map
最近在写
一个
底层网络模块,由于同时有上万个连接,因此得设计
一个
保证
线程
安全且性能不错的
map
。 这时候我特别怀念java,它有
一个
线程
安全的容器库,而C++不知为什么一直没有,只好自己设计
一个
了。 由于有数十万个连接,因此Concurrent
Map
内部必须分多个
map
来保存数据,比如说每个子
map
负责两万个连接,当连接数超过两万个时,Concurrent
Map
内部必须创建另外
一个
子
map
和互斥
高性能WEB开发
25,980
社区成员
4,366
社区内容
发帖
与我相关
我的任务
高性能WEB开发
高性能WEB开发
复制链接
扫一扫
分享
社区描述
高性能WEB开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章