Why is a ConcurrentModificationException thrown and how to debug it

后端 未结 8 2400
闹比i
闹比i 2020-11-21 12:57

I am using a Collection (a HashMap used indirectly by the JPA, it so happens), but apparently randomly the code throws a ConcurrentModificati

相关标签:
8条回答
  • 2020-11-21 13:57

    This is not a synchronization problem. This will occur if the underlying collection that is being iterated over is modified by anything other than the Iterator itself.

    Iterator it = map.entrySet().iterator();
    while (it.hasNext())
    {
       Entry item = it.next();
       map.remove(item.getKey());
    }
    

    This will throw a ConcurrentModificationException when the it.hasNext() is called the second time.

    The correct approach would be

       Iterator it = map.entrySet().iterator();
       while (it.hasNext())
       {
          Entry item = it.next();
          it.remove();
       }
    

    Assuming this iterator supports the remove() operation.

    0 讨论(0)
  • 2020-11-21 14:03

    I ran into this exception when try to remove x last items from list. myList.subList(lastIndex, myList.size()).clear(); was the only solution that worked for me.

    0 讨论(0)
提交回复
热议问题