我在Play / Scala中有两个Hibernate类,Group
和Item
,其中一个组可能有很多项。我需要的是从组中删除所有项目。我试着像这样删除:
val group = session.get(classOf[Group],groupCode)
val it = group.items.iterator
while(it.hasNext) {
val i = it.next
group.items.remove(i)
}
第一次迭代正常,但在第二次迭代中,我得到ConcurrentModificationException
。
这个例外是什么以及如何解决这个问题?
答案 0 :(得分:1)
如果要删除当前正在迭代的列表中的元素,请使用
it.remove()
它从底层集合中删除此迭代器返回的最后一个元素。
如果您对如何直接修改列表而引发ConcurrentModificationException的原因感兴趣,可以查看此javadoc http://docs.oracle.com/javase/8/docs/api/java/util/ConcurrentModificationException.html
请注意,此异常并不总是表示某个对象已被另一个线程同时修改。如果单个线程发出违反对象合同的一系列方法调用,则该对象可能会抛出此异常。例如,如果线程在使用失败快速迭代器迭代集合时直接修改集合,则迭代器将抛出此异常。