问题:
我有一个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线程写入之后立即读取后台线程.
谢谢,
特雷