Maison > Java > javaDidacticiel > Comment puis-je éviter ConcurrentModificationException lors de l'itération et de la modification d'une liste Java ?

Comment puis-je éviter ConcurrentModificationException lors de l'itération et de la modification d'une liste Java ?

DDD
Libérer: 2024-11-29 13:25:11
original
570 Les gens l'ont consulté

How Can I Avoid ConcurrentModificationException When Iterating and Modifying a Java List?

Comprendre l'exception de modification simultanée en Java

L'exception ConcurrentModificationException se produit lorsque plusieurs threads modifient simultanément une collection mutable, violant souvent sa cohérence interne. Pour illustrer ce concept, analysons un extrait de code qui rencontre cette exception.

import java.util.*;

public class ConcurrentModificationExample {

    public static void main(String[] args) {
        List<String> s = new ArrayList<>();
        ListIterator<String> it = s.listIterator();

        for (String a : args)
            s.add(a);

        if (it.hasNext())
            String item = it.next();

        System.out.println(s);
    }
}
Copier après la connexion

Ce code tente de parcourir une liste tout en y ajoutant des éléments. Cependant, l'exception est levée car le ListIterator a été créé avant l'ajout des éléments.

Pour éviter cette erreur, nous pouvons modifier le code comme suit :

import java.util.*;

public class ConcurrentModificationExample {

    public static void main(String[] args) {
        List<String> s = new ArrayList<>();

        for(String a : args)
            s.add(a);

        ListIterator<String> it = s.listIterator();    
        if(it.hasNext()) {  
            String item = it.next();   
        }  

        System.out.println(s);

    }
}
Copier après la connexion

Dans ce code révisé, l'itérateur de liste est créé après que les éléments ont été ajoutés à la liste, garantissant ainsi la cohérence. Un ListIterator permet de modifier la liste lors de l'itération, mais il est crucial qu'il soit créé après l'initialisation de la liste et non modifié entre la création et l'utilisation. Cela garantit que la liste reste dans un état valide tout au long de 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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal