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; } }
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!