【发布时间】:2021-09-19 22:07:27
【问题描述】:
我正在开发一个使用 Spring Boot 作为后端的应用程序。在循环并更新 Array 列表中的对象的值时抛出以下错误,
java.util.ConcurrentModificationException: null
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:911) ~[na:1.8.0_292]
at java.util.ArrayList$Itr.next(ArrayList.java:861) ~[na:1.8.0_292]
at org.hibernate.collection.internal.AbstractPersistentCollection$IteratorProxy.next(AbstractPersistentCollection.java:883) ~[hibernate-core-5.4.12.Final.jar!/:5.4.12.Final]
我已经改变了如下循环,
for(Object obj : myObjectList) {
obj.setEndDate(someDate);
obj.isActive(false);
objectRepository.save(obj);
}
和
Iterator<Object> objIterator = myObjectList.iterator();
while(objIterator.hasNext()) {
Object obj = objIterator.next();
obj.setEndDate(someDate);
obj.isActive(false);
objectRepository.save(obj);
}
两者都抛出相同的错误。
在将日志打印到这些 for 循环中时。它将第一次打印日志并在第二次迭代时抛出错误。
【问题讨论】:
-
objectRepository.save(object)是做什么的?如果这也改变了列表,那么将抛出异常。 -
object是什么?我假设objectRepository.save(object);为objectRepository.save(obj); -
感谢您指出@GauthamM。
-
这个应用程序是多线程的吗?在您迭代
myObjectList时,是否有其他线程正在修改它? -
没有堆栈跟踪吗?
标签: java spring-boot for-loop jpa arraylist