0
私のアプリケーションでは、いくつかのHashMapがあります。それらのうちの1人は、毎回、そして次にConcurrentModificationExceptionを投げます。問題は、どのマップが実際にどのマップをスローするか、そしてConcurrentModificationが発生したときにどのようにトレースするかわかりません。スタックトレースには、発生する行番号は表示されません。あなたが(古典的な例では、ループ内で除去である)二つの操作によって同時に変更されHashMap
評価することができない場合はHashMapがスローするトレース方法ConcurrentModificationException
java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:806)
at java.util.HashMap$ValueIterator.next(HashMap.java:838)
at com.parse.ParseTraverser.traverseInternal(ParseTraverser.java:87)
at com.parse.ParseTraverser.traverse(ParseTraverser.java:137)
at com.parse.ParseObject.collectFetchedObjects(ParseObject.java:817)
at com.parse.ParseObject.access$700(ParseObject.java:49)
at com.parse.ParseObject$13.then(ParseObject.java:1487)
at com.parse.ParseObject$13.then(ParseObject.java:1484)
at bolts.Task$15.run(Task.java:917)
at bolts.BoltsExecutors$ImmediateExecutor.execute(BoltsExecutors.java:105)
at bolts.Task.completeAfterTask(Task.java:908)
at bolts.Task.continueWithTask(Task.java:715)
ええ、私はまだ知っていますが、どのマップが問題なのかを確認できるようにしたいと考えていました。とにかく、ConcurrentHashMapはConcurrentModificationExceptionをスローしないことが保証されていますか?私はドキュメントを読んで、私の理解では起こるべきではありませんが、私はすべてのhashMapsを同時に実行しようとしたところ、私はまだこのエラーを受け取ることがあります。 – Slagathor
ConcurrentHashMapは同期されますが、ConcurrentModificationExceptionをスローすることはできません。 (答え:remove f.e.) – Xry
ConcurrentHashMapのイテレータを渡さない限り(各スレッドはそれ自身のイテレータを使用します)、安全でなければなりません。 –