Rumah >Java >javaTutorial >ConcurrentModificationException di Java dengan contoh

ConcurrentModificationException di Java dengan contoh

Barbara Streisand
Barbara Streisandasal
2025-02-07 12:01:13873semak imbas

ConcurrentModificationException in Java with Examples

Dalam persekitaran Multithreaded Java, jika kaedah itu menemui pengubahsuaian serentak semasa pengesanan sumber, pengecualian boleh dibuang. Pada masa ini, objek itu berada dalam keadaan yang tidak diubah suai.

ConcurrentModificationException Berikut adalah contoh pengecualian:

ConcurrentModificationException pengecualian ini biasanya berlaku apabila:

<code class="language-java">Exception in thread "main" java.util.ConcurrentModificationException
    at java.base/java.util.ArrayList$Itr.checkForComodification(ArrayList.java:000)
    at java.base/java.util.ArrayList$Itr.next(ArrayList.java:000)
    at com.journaldev.ConcurrentModificationException.ConcurrentModificationExceptionExample.main(ConcurrentModificationExceptionExample.java:00)</code>
Pengesanan dan lelaran pengecualian tidak ditakrifkan dalam kaedah

.

    Gunakan bendera dalaman bernama
  • , blok Iterator yang cepat gagal dalam gelung.
  • modCount
Algoritma Pengecualian

ConcurrentModificationException Algoritma ini menunjukkan cara menghasilkan pengecualian dalam persekitaran Java. Kami akan menulis beberapa kod Java untuk meneroka beberapa penyelesaian.

java.util.ConcurrentModificationException

Mulakan proses.
  1. mengisytiharkan dan mengimport pakej Java yang diperlukan.
  2. mengisytiharkan kelas awam.
  3. mengisytiharkan parameter rentetan.
  4. Buat objek ArrayList.
  5. Buat arraylist baru.
  6. Isi ArrayList.
  7. mengisytiharkan blok cuba.
  8. Senarai cetak.
  9. mengisytiharkan pengarah.
  10. Gunakan semasa gelung untuk melintasi nilai seterusnya.
  11. Tambah nilai semasa lelaran.
  12. Cetak ArrayList yang dikemas kini.
  13. Gunakan semasa gelung untuk melintasi nilai seterusnya.
  14. Tangkap pengecualian.
  15. Cetak maklumat pengecualian.
  16. Dapatkan nilai.
  17. Hentikan proses.
Pengecualian sintaks

ConcurrentModificationException sintaks berikut menunjukkan cara menghasilkan pengecualian dalam persekitaran Java:

ConcurrentModificationException sintaks di atas menunjukkan cara menghasilkan

pengecualian dalam persekitaran Java.
<code class="language-java">// ... (代码片段省略,与原文类似,但使用更简洁的变量名和注释) ...</code>

ConcurrentModificationException Penyelesaian

Kaedah 1: Ubah suai semasa proses lelaran
  • Kaedah ini secara langsung mengubahsuai pengumpulan semasa proses lelaran. Apabila Iterator Fast Flail gagal, pengecualian dilemparkan.

<code class="language-java">for (Iterator<integer> iterator = integers.iterator(); iterator.hasNext();) {
    Integer integer = iterator.next();
    if(integer == 2) {
        iterator.remove(); // 使用迭代器的remove()方法安全地移除元素
    }
}</integer></code>
Kaedah 2: Gunakan Iterator
    dan
  • kaedah dan gelung next() remove() Kaedah ini menggunakan kaedah
  • . Apabila set diubahsuai dalam persekitaran berbilang threaded, pengecualian akan dibuang.

iterator.next() Kesimpulan

Pengecualian biasanya berlaku apabila koleksi diubahsuai serentak. Artikel ini menerangkan bagaimana untuk mengelakkan pengecualian ini dan menyediakan contoh kod Java yang sepadan. Pengecualian ini dapat dielakkan dengan berkesan menggunakan kelas pengumpulan thread-selamat seperti

atau ConcurrentModificationException, serta kaedah CopyOnWriteArrayList Iterator. ConcurrentHashMap

Atas ialah kandungan terperinci ConcurrentModificationException di Java dengan contoh. 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