Maison >Java >javaDidacticiel >Pourquoi est-ce que j'obtiens une exception ConcurrentModificationException même lorsque j'utilise 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!