java中的很多容器在遍历的同时进行修改里面的元素都会ConcurrentModificationException,包括多线程情况和单线程的情况。多线程的情况就用说了,单线程出现这个异常一般是遍历(forEach)过程中的修改导致了list中的状态不一致,为了防止不一致带来不可预测的后果所以抛出异常。以ArrayList为例,每次操作都会进行内部状态检查,代码...
索引值变了,集合List里存在Iterator的属性,remove方法修改了size和modCount属性,但是Itr中的这cursor、expectedModCount却没有发生变化, 当增强for循环再次执行的时候,调用的却是Itr中的方法,最终发现了数据不一致,因此报错 2.解决 在循环为删除即可
myList.remove(value); // error } } 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 异常信息如下: Exception in thread “main” java.util.ConcurrentModificationException at java.util.AbstractList Itr.next(Unknown Source) 根本原因 以上都有3种...
使用迭代器删除元素而不是直接修改集合。如果需要在迭代期间添加或删除元素,使用 ConcurrentHashMap 或 CopyOnWriteArrayList 等并发数据结构。
在modCount != expectedModCount这个条件成立的时候会抛出ConcurrentModificationException异常,那么这个条件是怎么成立的呢? 1、首先我们查看modCount的来源,可以发现modCount的值等于当前List的size,当调用List.remove方法的时候modCount也会相应的减1; 2、然后我们查看expectedModCount的来源,可以看到是在构造Iterator(这里...
修改方案: 1. 用线程安全的List. CopyOnWriteArrayList , 因为我的是在缓存时的,所以不能用此方法,会导致强转报错 2. 加锁 staticReentrantReadWriteLockreadWriteLock=newReentrantReadWriteLock(); staticLockreadLock=readWriteLock.readLock(); staticLockwriteLock=readWriteLock.writeLock();...
Java操作集合时报错:java.util.ConcurrentModificationException解决方法,Java中,我们在遍历List、Set等集合时,对正在遍历的集合做add或remove操作时,会报如下异常:错误原因(初识):如下代码,在遍历集合时,若对集合做add或remove操作,操作后集合长度size实际已经
<string>it=myList.iterator();it.hasNext();){Stringvalue=it.next();if(value.equals("3")){myList.remove(value);// error}}for(Stringvalue:myList){System.out.println("List Value:"+value);if(vJava ConcurrentModificationException 异常分析与解决方案ls("3")){myList.remove(value);// error...
而后每次访问下一个元素之前,都会检查下modCount值是否变化,如果有变化,说明List的长度有变化。一旦长度有变化,就会抛出ConcurrentModificationException异常。 modCount的注释详细说明了这个字段表明List发生结构性变化(长度被修改)的次数,也就是删除插入等操作时,这个字段要加一。有兴趣的读者可以自行搜索下ArrayList代码,看...
for (String value : myList) { System. out.println( 'List Value:' value); if (value.equals( '3')) { myList.remove(value); // error } } 异常信息如下: Exception in thread 'main' java.util.ConcurrentModificationException at java.util.AbstractList$Itr.checkForComodification(Unknown Source...