2016-06-29 6 views
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) 

答えて

0

あなたは常にConcurrentHashMapを使用することができますスタックトレースの開始liksこれに見えます。

+0

ええ、私はまだ知っていますが、どのマップが問題なのかを確認できるようにしたいと考えていました。とにかく、ConcurrentHashMapはConcurrentModificationExceptionをスローしないことが保証されていますか?私はドキュメントを読んで、私の理解では起こるべきではありませんが、私はすべてのhashMapsを同時に実行しようとしたところ、私はまだこのエラーを受け取ることがあります。 – Slagathor

+1

ConcurrentHashMapは同期されますが、ConcurrentModificationExceptionをスローすることはできません。 (答え:remove f.e.) – Xry

+0

ConcurrentHashMapのイテレータを渡さない限り(各スレッドはそれ自身のイテレータを使用します)、安全でなければなりません。 –

関連する問題