Table des matières
Comment fonctionne ConcurrentModificationException en Java ?
Exemples d'exception Java ConcurrentModificationException
Exemple n°2
How to Avoid ConcurrentModificationException in Java?
Conclusion
Maison Java javaDidacticiel Java ConcurrentModificationException

Java ConcurrentModificationException

Aug 30, 2024 pm 04:13 PM
java

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
Copier après la connexion

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) ;
}
}
}
Copier après la connexion

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 :

Java ConcurrentModificationException

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) ;
}
}
}
Copier après la connexion

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:

Java ConcurrentModificationException

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!

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

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

<🎜>: Grow A Garden - Guide de mutation complet
3 Il y a quelques semaines By DDD
<🎜>: Bubble Gum Simulator Infinity - Comment obtenir et utiliser les clés royales
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Comment déverrouiller le grappin
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Système de fusion, expliqué
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Sujets chauds

Tutoriel Java
1668
14
Tutoriel PHP
1273
29
Tutoriel C#
1256
24
PHP: un langage clé pour le développement Web PHP: un langage clé pour le développement Web Apr 13, 2025 am 12:08 AM

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 vs Python: comprendre les différences PHP vs Python: comprendre les différences Apr 11, 2025 am 12:15 AM

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.

Break or Return of Java 8 Stream Forach? Break or Return of Java 8 Stream Forach? Feb 07, 2025 pm 12:09 PM

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 vs autres langues: une comparaison PHP vs autres langues: une comparaison Apr 13, 2025 am 12:19 AM

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 vs Python: fonctionnalités et fonctionnalités de base PHP vs Python: fonctionnalités et fonctionnalités de base Apr 13, 2025 am 12:16 AM

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.

Impact de PHP: développement Web et au-delà Impact de PHP: développement Web et au-delà Apr 18, 2025 am 12:10 AM

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

PHP: la fondation de nombreux sites Web PHP: la fondation de nombreux sites Web Apr 13, 2025 am 12:07 AM

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 vs Python: cas d'utilisation et applications PHP vs Python: cas d'utilisation et applications Apr 17, 2025 am 12:23 AM

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.

See all articles