0

ConcurrentModificationException で、Android アプリで実際にクラッシュが発生しています。

基本的に、私たちのライブラリの 1 つで、org.apache.http.impl.client.BasicCookieStore の addCookie メソッドを呼び出し、ConcurrentModificationException をスローします。関連するスタック トレースは次のとおりです。

ArrayList.java line 569: java.util.ArrayList$ArrayListIterator.next
Collections.java line 960: java.util.Collections$UnmodifiableCollection$1.next
....

BasicCookieStore クラス内部の配列リストにアクセスしようとしているスレッドが 2 つ (またはそれ以上) あるため、ConcurrentModificationException がスローされているようです。ここで、BasicCookieStore クラスが ThreadSafe としてマークされ、すべての配列リスト アクセス メソッドが同期されているように見えるとします。何が原因でしょうか? ヒント?

参照用の BasicCookieStore のソース コードは次のとおりです

4

2 に答える 2

0

ConcurrentModificationException の javadoc から:

この例外は、オブジェクトが別のスレッドによって同時に変更されたことを常に示すわけではないことに注意してください。1 つのスレッドが、オブジェクトのコントラクトに違反する一連のメソッド呼び出しを発行すると、オブジェクトはこの例外をスローする可能性があります。たとえば、フェイルファスト反復子を使用してコレクションを反復処理しているときに、スレッドがコレクションを直接変更すると、反復子はこの例外をスローします。

ここにリンクがあります: http://docs.oracle.com/javase/1.5.0/docs/api/java/util/ConcurrentModificationException.html

于 2013-09-30T19:26:47.643 に答える