Maison >Java >javaDidacticiel >Pourquoi est-ce que je reçois ConcurrentModificationException dans une méthode synchronisée ?

Pourquoi est-ce que je reçois ConcurrentModificationException dans une méthode synchronisée ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-08 02:50:01855parcourir

Why Am I Getting ConcurrentModificationException in a Synchronized Method?

ConcurrentModificationException dans la méthode synchronisée : démêler la confusion

Dans une méthode synchronisée comme celle fournie, l'exception ConcurrentModificationException peut survenir même avec l'exception synchronisée modificateur. Cette exception résulte généralement de la modification de la collection en cours d'itération dans la boucle d'itération.

Le problème ici est que la synchronisation de la méthode ne garantit pas que la collection ne sera pas modifiée pendant l'itération. Pour éviter cette exception, il est impératif d'éviter de modifier la collection lors de l'itération.

Un exemple typique d'extrait de code qui déclencherait cette exception est :

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

Au lieu de cela, le code doit utiliser la méthode iterator.remove() pour supprimer des éléments de la collection pendant l'itération. Si des ajouts à la collection sont nécessaires, le sous-type ListIterator peut être utilisé car il fournit une méthode add() lors du traitement d'une liste.

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