Rumah  >  Artikel  >  Java  >  Mengapakah `ConcurrentModificationException` Berlaku Walaupun Menggunakan `disegerakkan` dalam Java?

Mengapakah `ConcurrentModificationException` Berlaku Walaupun Menggunakan `disegerakkan` dalam Java?

Susan Sarandon
Susan Sarandonasal
2024-11-07 01:32:03994semak imbas

Why Does a `ConcurrentModificationException` Occur Despite Using `synchronized` in Java?

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!

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