Maison > Java > javaDidacticiel > Pourquoi une « ConcurrentModificationException » se produit-elle malgré l'utilisation de « synchronisé » en Java ?

Pourquoi une « ConcurrentModificationException » se produit-elle malgré l'utilisation de « synchronisé » en Java ?

Susan Sarandon
Libérer: 2024-11-07 01:32:03
original
1012 Les gens l'ont consulté

Why Does a `ConcurrentModificationException` Occur Despite Using `synchronized` in Java?

ConcurrentModificationException malgré la synchronisation

Dans cet extrait de code :

public synchronized X getAnotherX() {
  if (iterator.hasNext()) {
    X b = iterator.next();
    String name = b.getInputFileName();
    ...
    return b;
  } else {
    return null;
  }
}
Copier après la connexion

une ConcurrentModificationException est levée malgré l'utilisation du mot-clé synchronisé. Cette exception ne provient généralement pas de problèmes multithread, mais plutôt de modifications apportées à la collection sous-jacente au cours de l'itération.

Dans cet exemple spécifique, l'erreur se produit lors de l'itération dans la collection avec iterator.hasNext() et de la tentative de accéder à un élément avec iterator.next(). Si la collection sous-jacente est modifiée pendant que cette itération est en cours, comme l'ajout ou la suppression d'éléments, cela peut provoquer l'exception ConcurrentModificationException.

La solution consiste à éviter les modifications de la collection pendant l'itération. Ceci peut être réalisé en créant une copie de la collection ou en vérifiant et en gérant explicitement ces modifications dans la boucle d'itération. De plus, si le type de collection prend en charge un ListIterator, cette interface fournit des méthodes supplémentaires pour gérer les insertions et les suppressions pendant l'itération.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal