ConcurrentModificationException walaupun Penyegerakan
Dalam coretan kod ini:
public synchronized X getAnotherX() { if (iterator.hasNext()) { X b = iterator.next(); String name = b.getInputFileName(); ... return b; } else { return null; } }
ConcurrentModificationException dilemparkan walaupun menggunakan kata kunci disegerakkan. Pengecualian ini biasanya tidak timbul daripada isu berbilang benang, tetapi sebaliknya daripada pengubahsuaian kepada koleksi asas semasa lelaran.
Dalam contoh khusus ini, ralat berlaku apabila lelaran melalui koleksi dengan iterator.hasNext() dan cuba untuk akses elemen dengan iterator.next(). Jika koleksi asas diubah suai semasa lelaran ini sedang dijalankan, seperti menambah atau mengalih keluar elemen, ia boleh menyebabkan ConcurrentModificationException.
Penyelesaian terletak pada mengelakkan pengubahsuaian koleksi semasa lelaran. Ini boleh dicapai dengan mencipta salinan koleksi atau dengan menyemak dan mengendalikan pengubahsuaian ini secara eksplisit dalam gelung lelaran. Selain itu, jika jenis koleksi menyokong ListIterator, antara muka ini menyediakan kaedah tambahan untuk mengurus sisipan dan pengalihan keluar semasa lelaran.
Atas ialah kandungan terperinci Mengapakah `ConcurrentModificationException` Berlaku Walaupun Menggunakan `disegerakkan` dalam Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!