Rumah >Java >javaTutorial >Mengapa Saya Mendapat ConcurrentModificationException dalam Kaedah Disegerakkan?

Mengapa Saya Mendapat ConcurrentModificationException dalam Kaedah Disegerakkan?

Patricia Arquette
Patricia Arquetteasal
2024-11-08 02:50:01857semak imbas

Why Am I Getting ConcurrentModificationException in a Synchronized Method?

ConcurrentModificationException dalam Kaedah Disegerakkan: Merungkai Kekeliruan

Dalam kaedah yang disegerakkan seperti yang disediakan, pengecualian ConcurrentModificationException boleh timbul walaupun dengan penyegerakan pengubahsuai. Pengecualian ini biasanya terhasil daripada mengubah suai koleksi yang diulang dalam gelung lelaran.

Isu di sini ialah penyegerakan kaedah tidak menjamin bahawa koleksi tidak akan diubah suai semasa lelaran berlaku. Untuk mengelakkan pengecualian ini, adalah penting untuk mengelak daripada mengubah suai koleksi semasa lelaran.

Contoh tipikal coretan kod yang akan mencetuskan pengecualian ini ialah:

Iterator iterator = collection.iterator();
while (iterator.hasNext()) {
    Item item = (Item) iterator.next();
    if (item.satisfiesCondition()) {
       collection.remove(item);
    }
}

Sebaliknya, kod tersebut harus menggunakan kaedah iterator.remove() untuk mengalih keluar item daripada koleksi semasa lelaran. Jika penambahan pada koleksi diperlukan, subjenis ListIterator boleh digunakan kerana ia menyediakan kaedah add() apabila berurusan dengan senarai.

Atas ialah kandungan terperinci Mengapa Saya Mendapat ConcurrentModificationException dalam Kaedah Disegerakkan?. 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
Artikel sebelumnya:Memahami Kelas Wrapper di JawaArtikel seterusnya:Memahami Kelas Wrapper di Jawa