Rumah >Java >javaTutorial >Mengapa Saya Mendapat ConcurrentModificationException Walaupun Menggunakan Synchronized?

Mengapa Saya Mendapat ConcurrentModificationException Walaupun Menggunakan Synchronized?

Barbara Streisand
Barbara Streisandasal
2024-11-06 01:35:02669semak imbas

Why Do I Get a ConcurrentModificationException Even When Using 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn