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

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

Susan Sarandon
Lepaskan: 2024-11-07 01:32:03
asal
1013 orang telah melayarinya

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;
  }
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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 terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan