List<Ball> myObjs = myThreads[threadIndex].getMyObjList();
int initialSize = Collections.synchronizedList(myObjs).size();
引发 ConcurrentModificationException。我也试过把它放在一个 synchronized(myObjs) 块中,但它也没有用。解决办法是什么?在我使用此列表的其他任何地方,它都位于同步(块)中。
PS 这个错误最终也会产生 BrokenBarrierException。(是的,我正在使用循环屏障进行同步)
编辑:这是堆栈跟踪:
Exception in thread "Thread-3" java.util.ConcurrentModificationException
at java.util.ArrayList$SubList.checkForComodification(ArrayList.java:1091)
at java.util.ArrayList$SubList.size(ArrayList.java:921)
at java.util.Collections$SynchronizedCollection.size(Collections.java:1573)
at Part2.Animation.processCollisions(MyClass.java:133) // This is the call to size()
编辑:循环看起来像
for (int threadIndex=0; threadIndex < numThreads; threadIndex++) {
List<Ball> myObjs = myThreads[threadIndex].getMyObjList();
int initialSize = Collections.synchronizedList(myObjs).size();
}
并且无论 numThreads 是多少,当 threadIndex=1 时都会发生异常。