在后台android中更新concurrentHashMap时从中访问数据

在后台android中更新concurrentHashMap时从中访问数据,android,hashmap,java.util.concurrent,concurrenthashmap,Android,Hashmap,Java.util.concurrent,Concurrenthashmap,我有一个在后台更新的静态concurrentHashMap对象。当它被更新时,我想在另一个线程中访问它的值。我正在使用concurrentHashMap,我从文档中了解到这一点,并认为它将适合这种场景 这就是我正在做的 for (Map.Entry<String, ArrayList<property>> entry : alldata.entrySet()) { udata.put(entry.getKey(), new Arra

我有一个在后台更新的静态concurrentHashMap对象。当它被更新时,我想在另一个线程中访问它的值。我正在使用concurrentHashMap,我从文档中了解到这一点,并认为它将适合这种场景

这就是我正在做的

for (Map.Entry<String, ArrayList<property>> entry : alldata.entrySet())
        {
            udata.put(entry.getKey(), new ArrayList<property>(entry.getValue()));
        }
for(Map.Entry:alldata.entrySet())
{
put(entry.getKey(),newArrayList(entry.getValue());
}
在上面的代码中,我在后台更新从服务器获取数据的udata

而在另一个线程中,我正在访问一些信息

  for (String s: sTypes) 
        {
                    if(jprocess.udata != null)
                        {
                            if (jprocess.udata.get(s) != null)
                                {
                                    if (jprocess.udata.get(s).size() > 0) {
                                        if (xcor < jprocess.udata.get(s).size())
                                            if (xcor != -1) {
                                                allData.add(jprocess.udata.get(s).get(xcor));
                                            }
                                    }
                                }
                        }
                }
for(字符串s:sTypes)
{
if(jprocess.udata!=null)
{
if(jprocess.udata.get(s)!=null)
{
if(jprocess.udata.get(s).size()>0){
if(xcor
但是,当我试图从中访问任何索引时,我无法访问任何内容,我希望清楚地知道我想要什么


我已经尝试过ConcurrentHashMap,它应该适用于这种情况,但可能是我没有很好地理解它。

如果您使用的是ConcurrentHashMap,那么它没有一点不起作用。我强烈怀疑您试图访问错误的索引,或者您在插入和访问特定索引之间没有同步

为此,只需在代码和每个if条件下检查udata的大小和xcor的值


此外,请仔细阅读,确保您确信ConcurrentHashMap是解决您的问题的正确解决方案

你指的是哪个索引?从hashmap到key的任何索引…首先,调用它的值以遵循公共语言,其次,你确定在填充映射后开始访问数据吗?这是我的观点,映射在后台不断填充…因此我想在添加新数据时从它访问现有值…我相信您需要查看
CountDownLatch()
和java.util.concurrency包中的其他类。