java hashtable 线程安全的_java-Hashtable,ConcurrentHashMap和数据可见性

问题:

我有一个ViewModel基类,该基类具有一个HashMap来存储ViewModel的属性值.但是,我遇到了一个间歇性错误,即在添加项目后,从此集合(在单独的线程上)进行的读取直接返回null.

private HashMap _propertyValues = new HashMap();

一个示例:当用户ID提供给ViewModel时,我想获取用户信息.

ViewModel最多可以为UserID连接PropertyChanged.更改属性的处理程序将创建一个后台线程来提取值.后台线程读取UserID,然后从服务器获取.

我们看到的是,在极少数情况下,在提供值(线程1)之后,后台线程会直接从属性hashmap(线程2)读取null.

我的想法:我怀疑这是由于data visibility和缺少线程安全集合所致.在查看线程安全选项时,我遇到了:

>哈希表-似乎社区认为这已经过时,不鼓励使用它.

> ConcurrentHashMap-由于缺少可靠的同步,似乎我仍然会遇到问题

> Collections.synchronizedMap(map)-似乎在使用方式上特别,不确定是否比Hashtable更具优势

这时候我觉得Hashtable是我想要的,但是可以使用确认. ?

用例:

> 100ish大约每分钟一次读取所有内容.

>来自UI线程的频繁写入

>从需要精确值的后台线程中进行定期读取.在UI线程写入之后立即读取后台线程.

谢谢,

特雷

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值