访问concurrentHashMap中的数据,同时在后台android中进行更新



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

以下是我正在做的

for (Map.Entry<String, ArrayList<property>> entry : alldata.entrySet())
        {
            udata.put(entry.getKey(), new ArrayList<property>(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));
                                            }
                                    }
                                }
                        }
                }

但当我试图从中访问任何索引时,我无法访问任何内容,我希望它清楚我想要什么。。

我已经尝试过ConcurrentHashMap,它应该适用于这种情况,但可能我不太理解。。

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

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

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

最新更新