Maison >Java >javaDidacticiel >Pourquoi est-ce que j'obtiens une exception ConcurrentModificationException même lorsque j'utilise Synchronized ?

Pourquoi est-ce que j'obtiens une exception ConcurrentModificationException même lorsque j'utilise Synchronized ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-06 01:35:02662parcourir

Why Do I Get a ConcurrentModificationException Even When Using Synchronized?

ConcurrentModificationException lors de l'utilisation de Synchronized

Malgré la synchronisation de la méthode getAnotherX, vous rencontrez une exception ConcurrentModificationException lors de l'appel de iterator.next(). Pour comprendre pourquoi cela se produit, il est crucial de comprendre la nature de ConcurrentModificationException.

Nature de ConcurrentModificationException

Contrairement à son nom, ConcurrentModificationException n'est pas principalement causée par plusieurs threads. . Cela se produit souvent lors de la modification de la collection itérée dans la boucle d'itération. Voici un exemple :

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

Dans ce scénario, utiliser iterator.remove() au lieu de collection.remove(item) est essentiel. Cette exception peut également se produire lors de l'ajout à la collection. Malheureusement, il n'existe pas de solution générale à ce cas. Cependant, si vous avez affaire à une liste, vous pouvez utiliser ListIterator, qui possède une méthode add().

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn