Sobes.tech
Junior — Middle

Ποια μέθοδο μπορεί να χρησιμοποιηθεί για να αποφευχθεί η εξαίρεση ConcurrentModificationException κατά την εργασία με συλλογές σε περιβάλλον πολλαπλών νημάτων;

sobes.tech AI

Απάντηση από AI

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

  • Χρησιμοποιήστε συλλογές ασφαλείς για νήματα από το πακέτο java.util.concurrent, π.χ., ConcurrentHashMap, CopyOnWriteArrayList.
  • Συγχρονίστε την πρόσβαση στη συλλογή χειροκίνητα με μπλοκ synchronized ή άλλα μηχανισμούς συγχρονισμού.
  • Χρησιμοποιήστε επεξεργαστές που υποστηρίζουν ασφαλείς τροποποιήσεις, π.χ., ListIterator για λίστες.
  • Δημιουργήστε αντίγραφα των συλλογών για επανάληψη (π.χ., μέσω new ArrayList<>(αρχικήΛίστα)), ώστε να αποφύγετε την αλλαγή της αρχικής συλλογής κατά τη διάρκεια της επανάληψης.

Παράδειγμα χρήσης του CopyOnWriteArrayList:

CopyOnWriteArrayList<String> λίστα = new CopyOnWriteArrayList<>();
λίστα.add("item1");
for (String item : λίστα) {
    λίστα.add("item2"); // δεν θα προκαλέσει την εξαίρεση ConcurrentModificationException
}