Γιατί εμφανίζεται η εξαίρεση ταυτόχρονης τροποποίησης στη java;

Πίνακας περιεχομένων:

Γιατί εμφανίζεται η εξαίρεση ταυτόχρονης τροποποίησης στη java;
Γιατί εμφανίζεται η εξαίρεση ταυτόχρονης τροποποίησης στη java;
Anonim

Η εξαίρεση ταυτόχρονης τροποποίησης προκύπτει όταν ένα αντικείμενο επιχειρείται να τροποποιηθεί ταυτόχρονα όταν δεν είναι επιτρεπτό. Αυτή η εξαίρεση έρχεται συνήθως όταν κάποιος εργάζεται με κλάσεις Java Collection. Για παράδειγμα - Δεν επιτρέπεται ένα νήμα να τροποποιεί μια Συλλογή όταν κάποιο άλλο νήμα επαναλαμβάνεται από πάνω της.

Πώς μπορώ να διορθώσω την εξαίρεση ταυτόχρονης τροποποίησης;

Μπορούμε επίσης να αποφύγουμε την εξαίρεση ταυτόχρονης τροποποίησης σε ένα περιβάλλον μονού νήματος. Μπορούμε να χρησιμοποιήσουμε τη μέθοδο αφαίρεσης του Iterator για να αφαιρέσουμε το αντικείμενο από το υποκείμενο αντικείμενο συλλογής. Αλλά σε αυτήν την περίπτωση, μπορείτε να αφαιρέσετε μόνο το ίδιο αντικείμενο και όχι οποιοδήποτε άλλο αντικείμενο από τη λίστα.

Πώς αποτρέπετε την εξαίρεση ταυτόχρονης τροποποίησης σε έναν χάρτη;

χρησιμοποιήστε ConcurrentHashMap. συνεχίστε να χρησιμοποιείτε το απλό HashMap, αλλά δημιουργήστε έναν νέο χάρτη σε κάθε τροποποίηση και αλλάξτε χάρτες στα παρασκήνια (συγχρονίζοντας τη λειτουργία διακόπτη ή χρησιμοποιώντας AtomicReference)

Ποια μέθοδος επαναλήπτη δημιουργεί εξαίρεση ταυτόχρονης τροποποίησης;

Αν καλέσουμε μια ακολουθία μεθόδων σε ένα αντικείμενο που παραβιάζει τη σύμβασή του, τότε το αντικείμενο ρίχνει ConcurrentModificationException. Για παράδειγμα: εάν κατά την επανάληψη πάνω από τη συλλογή, προσπαθήσουμε απευθείας να τροποποιήσουμε αυτήν τη συλλογή, τότε ο δεδομένος fail-fast iterator θα ρίξει αυτήν την ConcurrentModificationException.

Ποια είναι η εξαίρεση ταυτόχρονης τροποποίησης στην υπερχείλιση στοίβας Java;

Αν ένα μεμονωμένο νήμα εκδίδει μια ακολουθία κλήσεων μεθόδου που παραβιάζει τη σύμβαση ενός αντικειμένου, το αντικείμενο μπορεί να κάνει αυτήν την εξαίρεση. Για παράδειγμα, εάν ένα νήμα τροποποιήσει μια συλλογή απευθείας ενώ επαναλαμβάνει τη συλλογή με έναν επαναλήπτη γρήγορης αποτυχίας, ο επαναλήπτης θα κάνει αυτήν την εξαίρεση.

Συνιστάται: