在后台更新时从 concurrentHashMap 访问数据 android
accessing data from concurrentHashMap while it gets updated in background 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 的值。
此外,请仔细阅读 this,您肯定会相信 ConcurrentHashMap 是解决您问题的正确方法。
我有一个在后台更新的静态 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 的值。
此外,请仔细阅读 this,您肯定会相信 ConcurrentHashMap 是解决您问题的正确方法。