使用Asynctask(ANDROID)解决ConcurrentModificationException问题

时间:2019-03-29 16:25:06

标签: java android multithreading android-asynctask

我收到了ConcurrentModificationException(ArrayList)异常,我不确定如何解决它,因为在这种情况下,这种异常非常罕见且不可重现。

情况: 我有一个主线程:

for(Element element : myList){
    Value value = element.getValue(); <-------- ConcurrentModificationException (ArrayList)
}

还有一个带有以下内容的AsyncTask:

public class LoadMapObjectsTask extends AsyncTask<String, String, String> {
    protected String doInBackground(String... params) {
        // some other logic
        myList.remove(element);
    }
}

我可以理解冲突,但是我不确定如何正确预防冲突。也许使用简单的sync {}?我该如何解决?

1 个答案:

答案 0 :(得分:0)

也许您可以使用Iterator.remove()更改代码以返回特定的值,该值可以识别为删除元素的符号:

Iterator<Element> it = myList.iterator();
while (it.hasNext()) {
  Value value = it.next().getValue()
  if (value == null) {
    it.remove();
  }
}