Java ConcurrentModificationException
Java Programming Language propose une gamme de cas de gestion des exceptions, et Concurrent Modification Exception en fait partie. Une exception de modification simultanée se produit lorsqu'un thread d'un programme tente de modifier un objet qui ne dispose pas des autorisations nécessaires pour être modifié pendant le processus en cours. Donc simplement, lorsque nous tentons de modifier un objet actuellement utilisé par un autre processus, la ConcurrentModificationException apparaîtra.
Commencez votre cours de développement de logiciels libres
Développement Web, langages de programmation, tests de logiciels et autres
Un exemple très simple serait une collection qui a été traitée par un thread. La collection en cours de processus ne peut pas être modifiée et lève donc ConcurrentModificationException.
Syntaxe :
Vous trouverez ci-dessous la syntaxe la plus simple pour l'exception. ConcurrentModificationException fait partie du langage Java RunTimeException et l'étend.
public class Concurrent Modification Exception extends Runtime Exception
Comment fonctionne ConcurrentModificationException en Java ?
Il est compréhensible que nous fixions certaines limites et autorisations en fonction de nos besoins lorsque nous créons des objets en Java. Mais parfois, nous essayons de changer les valeurs ou de modifier la liste, juste au moment où elle est dans le fil, et c'est à ce moment-là que ConcurrentModificationException apparaît car l'objet a été utilisé par un autre fil et ne peut pas être modifié ou amendé.
Il est également important de savoir que cette exception ne signifie pas toujours qu’un objet est modifié simultanément. Dans le cas d'un seul thread, cette exception peut être levée si des invocations de méthodes ont lieu, ce qui viole d'une manière ou d'une autre le contrat d'objet.
Constructeurs :
Un constructeur très basique pour ConcurrentModificationException est aussi simple que suivant : ConcurrentModificationException (). Outre le simple constructeur, nous avons les contributeurs suivants qui peuvent être utilisés selon les besoins :
- ConcurrentModificationException (String textmessage): Constructeur avec un message simple.
- ConcurrentModificationException (String textmessage, Throwable textcause) : Constructeur avec un message et une cause détaillée.
- ConcurrentModificationException ( Throwable textcause): Constructeur avec une cause, ici la cause peut être nulle, ce qui signifie qu'elle est inconnue.
Exemples d'exception Java ConcurrentModificationException
Maintenant que nous avons compris ce qu'est l'exception de modification simultanée et comment elle fonctionne, passons à la mise en œuvre. Nous allons maintenant comprendre l'exception avec un exemple ; par exemple, nous aurons une liste de tableaux et, parallèlement à certaines opérations, nous tenterons de la modifier, ce qui entraînera une exception. Le code de l'exemple est le suivant :
Exemple n°1
Code :
import java.awt.List; import java.util.*; public class ConcurrentModificationException { public static void main ( String[] args) { ArrayList<Integer> Numberlist = new ArrayList<Integer> () ; Numberlist.add ( 1) ; Numberlist.add ( 2) ; Numberlist.add ( 3) ; Numberlist.add ( 4) ; Numberlist.add ( 5) ; Iterator<Integer> it = Numberlist.iterator () ; while ( it.hasNext () ) { Integer numbervalue = it.next () ; System.out.println ( "List Value:" + numbervalue) ; if ( numbervalue .equals ( 3) ) Numberlist.remove ( numbervalue) ; } } }
Explication du code : Commencé avec quelques fichiers d'importation, puis la décélération de classe et la méthode principale. Initialisez la liste des tableaux et ajoutez une fonction pour continuer à ajouter un nombre ; de cette façon, ce sera en cours de traitement. À chaque ajout suivant, nous imprimons la valeur de la liste. Mais nous avons ensuite une boucle if, qui recherchera un nombre égal à 3, et une fois que 3 sera trouvé, elle tentera de supprimer le nombre, et c'est là que l'exception se rencontrera et le programme sera terminé. Il n’y aura plus d’ajouts à la liste.
Si vous exécutez le code ci-dessus sans aucune erreur, le code tombera sur une exception. Cette exception se trouve dans ConcurrentModificationException.main ( ConcurrentModificationException.java:14). La raison de cette exception est claire : nous avons tenté de modifier une liste, Numberlist. Reportez-vous à la capture d'écran ci-jointe pour un résultat correct :
Comme vous pouvez le voir, le programme a été exécuté comme prévu, les instructions print exécutées avec succès jusqu'à ce qu'elles atteignent la valeur 3. Le déroulement du programme a été interrompu à la valeur 3 car nous avions une boucle if, qui semble pour une valeur égale à trois et la supprime. Mais l'itérateur est déjà en cours et la tentative de suppression du 3 échouera, ce qui lèvera l'exception ConcurrentModificationException.
Exemple n°2
pour les besoins du deuxième exemple, nous tenterons d'exécuter un programme qui réussira à éviter l'exception de modification simultanée. Dans le même code, si nous essayons de modifier la liste des tableaux pendant le processus, elle interceptera l'exception ConcurrentModificationException et le programme sera terminé. Le code du deuxième exemple est le suivant :
Code :
import java.util.Iterator; import java.util.ArrayList; public class ConcurrentModificationException { public static void main ( String args[]) { ArrayList<String> arraylist = new ArrayList<String> ( ) ; arraylist.add ( "One") ; arraylist.add ( "Two") ; arraylist.add ( "Three") ; arraylist.add ( "Four") ; try { System.out.println ( "ArrayList: ") ; Iterator<String> iteratornew = arraylist.iterator () ; while ( iteratornew.hasNext ( ) ) { System.out.print ( iteratornew.next () + ", "); } System.out.println ( "\n\n Trying to add an element in between iteration:" + arraylist.add ( "Five") ) ; System.out.println ( "\n Updated ArrayList: \n") ; iteratornew = arraylist.iterator () ; while ( iteratornew.hasNext ( ) ) { System.out.print ( iteratornew.next () + ", "); } } catch ( Exception e) { System.out.println ( e) ; } } }
Code Explanation: Similar to the earlier program, we have the required files and methods. We are simply adding a few elements to the array list, and it is iterating; we add another element, which is Five. We will print the updated list upon the latest additions, which will have our newly added element. We have implemented the try-catch block to catch the exception. If any exception occurs, it will print the exception.
Output:
As you can see in the output, the first array list is plain, with few elements. Then in the next line, we attempt to add an element while in iteration, the element is “Five”. It is successfully added, and it prints true for the sentence. And in the next line, we print an updated list, which has the Five-element. We have updated the list after the process is ending; if we try to add the element while in the process, it will throw the ConcurrentModificationException, and the program will cease.
How to Avoid ConcurrentModificationException in Java?
Avoiding Concurrent Modification Exception is possible on a different level of threads. To avoid a Concurrent Exception with a single thread environment, you can remove the object from the iterator and modify it, use remove ().
And in the case of a multi-thread environment, you have few choices like converting the list in the process into an array and then working on the array. Then you can also put a synchronized block over a list and lock it. But locking the list is not recommended as it may limit the advantages of multi-threading programming. Using a sublist to modify a list will result in nothing. Out of all the ways to avoid, the most preferred way is to wait until the execution is finished and then edit or modify the list or the object.
Conclusion
When a process is using one resource and another process attempts to edit or amend it, the exception ConcurrentModificationException will be thrown. The simplest method to avoid is to modify the list after iteration. Many methods are listed to avoid the exception but advised to implement them with small programs.
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds











PHP est un langage de script largement utilisé du côté du serveur, particulièrement adapté au développement Web. 1.Php peut intégrer HTML, traiter les demandes et réponses HTTP et prend en charge une variété de bases de données. 2.PHP est utilisé pour générer du contenu Web dynamique, des données de formulaire de traitement, des bases de données d'accès, etc., avec un support communautaire solide et des ressources open source. 3. PHP est une langue interprétée, et le processus d'exécution comprend l'analyse lexicale, l'analyse grammaticale, la compilation et l'exécution. 4.PHP peut être combiné avec MySQL pour les applications avancées telles que les systèmes d'enregistrement des utilisateurs. 5. Lors du débogage de PHP, vous pouvez utiliser des fonctions telles que error_reportting () et var_dump (). 6. Optimiser le code PHP pour utiliser les mécanismes de mise en cache, optimiser les requêtes de base de données et utiliser des fonctions intégrées. 7

PHP et Python ont chacun leurs propres avantages, et le choix doit être basé sur les exigences du projet. 1.Php convient au développement Web, avec une syntaxe simple et une efficacité d'exécution élevée. 2. Python convient à la science des données et à l'apprentissage automatique, avec une syntaxe concise et des bibliothèques riches.

Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

PHP convient au développement Web, en particulier dans le développement rapide et le traitement du contenu dynamique, mais n'est pas bon dans les applications de la science des données et de l'entreprise. Par rapport à Python, PHP présente plus d'avantages dans le développement Web, mais n'est pas aussi bon que Python dans le domaine de la science des données; Par rapport à Java, PHP fonctionne moins bien dans les applications au niveau de l'entreprise, mais est plus flexible dans le développement Web; Par rapport à JavaScript, PHP est plus concis dans le développement back-end, mais n'est pas aussi bon que JavaScript dans le développement frontal.

PHP et Python ont chacun leurs propres avantages et conviennent à différents scénarios. 1.PHP convient au développement Web et fournit des serveurs Web intégrés et des bibliothèques de fonctions riches. 2. Python convient à la science des données et à l'apprentissage automatique, avec une syntaxe concise et une bibliothèque standard puissante. Lors du choix, il doit être décidé en fonction des exigences du projet.

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

Les raisons pour lesquelles PHP est la pile technologique préférée pour de nombreux sites Web incluent sa facilité d'utilisation, son soutien communautaire solide et son utilisation généralisée. 1) Facile à apprendre et à utiliser, adapté aux débutants. 2) Avoir une énorme communauté de développeurs et des ressources riches. 3) Largement utilisé dans WordPress, Drupal et d'autres plateformes. 4) Intégrez étroitement aux serveurs Web pour simplifier le déploiement du développement.

PHP convient aux systèmes de développement Web et de gestion de contenu, et Python convient aux scripts de science des données, d'apprentissage automatique et d'automatisation. 1.Php fonctionne bien dans la création de sites Web et d'applications rapides et évolutifs et est couramment utilisé dans CMS tel que WordPress. 2. Python a permis de manière remarquable dans les domaines de la science des données et de l'apprentissage automatique, avec des bibliothèques riches telles que Numpy et Tensorflow.
