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
}