List<Ball> myObjs = myThreads[threadIndex].getMyObjList();
int initialSize = Collections.synchronizedList(myObjs).size();
ConcurrentModificationException をスローします。これを同期(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 の場合に例外が発生します。