Rumah >Java >javaTutorial >Mengapa Saya Mendapat ConcurrentModificationException Walaupun Menggunakan Synchronized?
ConcurrentModificationException apabila Menggunakan Synchronized
Walaupun menyegerakkan kaedah getAnotherX, anda menghadapi pengecualian ConcurrentModificationException apabila memanggil iterator.next(). Untuk memahami sebab ini berlaku, adalah penting untuk memahami sifat ConcurrentModificationException.
Nature of ConcurrentModificationException
Bertentangan dengan namanya, ConcurrentModificationException bukan disebabkan terutamanya oleh berbilang rangkaian . Ia sering timbul apabila mengubah suai koleksi yang diulang dalam gelung lelaran. Berikut ialah contoh:
Iterator iterator = collection.iterator(); while (iterator.hasNext()) { Item item = (Item) iterator.next(); if (item.satisfiesCondition()) { collection.remove(item); } }
Dalam senario ini, menggunakan iterator.remove() dan bukannya collection.remove(item) adalah penting. Pengecualian ini juga boleh berlaku apabila menambah koleksi. Malangnya, tiada penyelesaian umum untuk kes ini. Walau bagaimanapun, jika anda berurusan dengan Senarai, anda boleh menggunakan ListIterator, yang mempunyai kaedah add().
Atas ialah kandungan terperinci Mengapa Saya Mendapat ConcurrentModificationException Walaupun Menggunakan Synchronized?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!