Looking for java Answers? Try Ask4KnowledgeBase
Looking for java Keywords? Try Ask4Keywords

Java Language Piège: exceptions de modification concurrentes


Exemple

Cette exception se produit lorsqu'une collection est modifiée lors d'une itération utilisant des méthodes autres que celles fournies par l'objet itérateur. Par exemple, nous avons une liste de chapeaux et nous voulons supprimer tous ceux qui ont des oreillettes:

List<IHat> hats = new ArrayList<>();
hats.add(new Ushanka()); // that one has ear flaps
hats.add(new Fedora());
hats.add(new Sombrero());
for (IHat hat : hats) {
    if (hat.hasEarFlaps()) {
        hats.remove(hat);
    }
}

Si nous exécutons ce code, ConcurrentModificationException sera levée car le code modifie la collection tout en l'itérant. La même exception peut se produire si l'un des threads multiples travaillant avec la même liste tente de modifier la collection alors que d'autres la parcourent. La modification simultanée de collections dans plusieurs threads est une chose naturelle, mais devrait être traitée avec les outils habituels de la boîte à outils de programmation simultanée tels que les verrous de synchronisation, les collections spéciales adoptées pour la modification simultanée, la modification de la collection clonée, etc.