Maison  >  Article  >  Java  >  Comment éviter « ConcurrentModificationException » lors de l'utilisation de méthodes synchronisées ?

Comment éviter « ConcurrentModificationException » lors de l'utilisation de méthodes synchronisées ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-08 02:36:02687parcourir

How to Avoid `ConcurrentModificationException` When Using Synchronized Methods?

Éviter ConcurrentModificationException lors de l'utilisation de méthodes synchronisées

L'erreur ConcurrentModificationException se produit généralement en raison de modifications apportées à la collection sur laquelle un itérateur itère dans la boucle corps. Malgré la présence d'un mot-clé synchronisé dans la déclaration de la méthode, cette exception peut toujours être rencontrée.

Dans l'extrait de code fourni :

public synchronized X getAnotherX(){ 
  if(iterator.hasNext()){
   X b = iterator.next();
   String name = b.getInputFileName();
  ...
   return b;
  }
  else{return null;}
 }

L'erreur est probablement générée car un thread externe modifie la collection sous-jacente pendant que l'itérateur parcourt celle-ci. Cette modification peut inclure l'ajout ou la suppression d'éléments.

La solution à ce problème est de garantir qu'aucun autre thread ne peut modifier la collection pendant l'itération. Ceci peut être réalisé en créant une copie de la collection avant de la parcourir. Cependant, si cela n’est pas réalisable, l’itérateur doit alors être obtenu de manière thread-safe. Cela peut être fait en utilisant la méthode Collections.synchronizedList() ou en créant un wrapper de synchronisation personnalisé pour la collection.

En suivant ces étapes, vous pouvez vous assurer que l'exception ConcurrentModificationException n'est pas rencontrée et que la collection est itérée. en toute sécurité.

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