ホームページ  >  記事  >  Java  >  同期メソッドで ConcurrentModificationException が発生するのはなぜですか?

同期メソッドで ConcurrentModificationException が発生するのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-08 02:50:01784ブラウズ

Why Am I Getting ConcurrentModificationException in a Synchronized Method?

同期メソッドの ConcurrentModificationException: 混乱の解明

提供されているような同期メソッドでは、同期メソッドでも ConcurrentModificationException 例外が発生する可能性があります。修飾子。この例外は、通常、反復ループ内で反復されるコレクションを変更することで発生します。

ここでの問題は、メソッドを同期しても、反復の実行中にコレクションが変更されないことが保証されないことです。この例外を防ぐには、反復中にコレクションを変更しないようにすることが不可欠です。

この例外をトリガーするコード スニペットの典型的な例は次のとおりです。

Iterator iterator = collection.iterator();
while (iterator.hasNext()) {
    Item item = (Item) iterator.next();
    if (item.satisfiesCondition()) {
       collection.remove(item);
    }
}

代わりに、コードでは次のコードを使用する必要があります。 iterator.remove() メソッドを使用して、反復中にコレクションから項目を削除します。コレクションへの追加が必要な場合は、リストを処理するときに add() メソッドを提供する ListIterator サブタイプを利用できます。

以上が同期メソッドで ConcurrentModificationException が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。