ConcurrentModificationException:需要帮助理解" synchronized"

时间:2014-11-25 16:35:44

标签: android concurrency

以下方法抛出ConcurrentModificationException,因为它迭代的列表会被修改。我可以使用synchronized来锁定某些东西......在列表被修改或迭代时?

我该怎么做呢?我尝试了几种方法,但似乎没有一种方法可行。例如,锁定“this”不起作用。

public class Deck extends ArrayList<Card> {
...
    public void render(Canvas canvas) {
       for (Card card : this) {
           // Do stuff
       }
    }
...
}

1 个答案:

答案 0 :(得分:0)

您需要使用迭代器及其添加/删除项目的方法,例如:

public class Deck extends ArrayList<Card> {
...
    public void render(Canvas canvas) {

       Iterator<Card> it = iterator();
       while (it.hasNext()) {
           Card card = it.next;
           // Do stuff
           // remove card
           it.remove();
           // add new card
           it.add(new Card());
       }
    }
...
}