我有一个问题。同时访问 Vector 我得到一个 ConcurrentModificationException。我将同步块(synchronized block)添加到所有 vector 迭代中,但可能忘记了一个或者还有另一个泄漏。
问题是错误堆栈跟踪显示的错误是对 Vector.retainAll() 的调用,这是一个同步方法。我怎么能猜出碰撞中涉及的另一点是什么?
提前致谢
08-24 13:37:25.968: ERROR/AndroidRuntime(6582): java.util.ConcurrentModificationException
08-24 13:37:25.968: ERROR/AndroidRuntime(6582): at java.util.AbstractList$SubAbstractList.listIterator(AbstractList.java:320)
08-24 13:37:25.968: ERROR/AndroidRuntime(6582): at java.util.AbstractList$SubAbstractList.iterator(AbstractList.java:307)
08-24 13:37:25.968: ERROR/AndroidRuntime(6582): at java.util.AbstractCollection.contains(AbstractCollection.java:128)
08-24 13:37:25.968: ERROR/AndroidRuntime(6582): at java.util.Collections$SynchronizedCollection.contains(Collections.java:432)
08-24 13:37:25.968: ERROR/AndroidRuntime(6582): at java.util.AbstractCollection.retainAll(AbstractCollection.java:319)
08-24 13:37:25.968: ERROR/AndroidRuntime(6582): at java.util.Vector.retainAll(Vector.java:856)
最佳答案
检查您在迭代 Vector 时结构性修改 Vector(添加或删除)的代码 - 这很可能是您得到 CME 的原因.使用迭代器做这样的修改,避免CME
void unsafeMod(Vector data) {
for (Object o : data) {
if (o != null) {
data.remove(o); // may cause CME
}
}
}
我也支持 advice使用 ArrayList 而不是 Vector。
关于java - ConcurrentModificationException 修复问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7174844/