Mengapa pengecualian pengubahsuaian serentak berlaku di java?

Mengapa pengecualian pengubahsuaian serentak berlaku di java?
Mengapa pengecualian pengubahsuaian serentak berlaku di java?
Anonim

ConcurrentModificationException berlaku apabila objek cuba diubah suai secara serentak apabila ia tidak dibenarkan. Pengecualian ini biasanya berlaku apabila seseorang bekerja dengan kelas Koleksi Java. Sebagai Contoh - Tidak dibenarkan untuk utas untuk mengubah suai Koleksi apabila beberapa utas lain beralih ke atasnya.

Bagaimanakah saya boleh membetulkan pengecualian pengubahsuaian serentak?

Kami juga boleh mengelakkan Pengecualian Pengubahsuaian Serentak dalam persekitaran berulir tunggal. Kita boleh menggunakan kaedah alih keluar Iterator untuk mengalih keluar objek daripada objek koleksi asas. Tetapi dalam kes ini, anda boleh mengalih keluar objek yang sama sahaja dan bukan objek lain daripada senarai.

Bagaimanakah anda menghalang pengecualian pengubahsuaian serentak pada peta?

gunakan ConcurrentHashMap. teruskan menggunakan HashMap mudah, tetapi bina peta baharu pada setiap pengubahsuaian dan tukar peta di belakang tabir (menyegerakkan operasi suis atau menggunakan AtomicReference)

Kaedah iterator yang manakah membuang pengecualian pengubahsuaian serentak?

Jika kita menggunakan urutan kaedah pada objek yang melanggar kontraknya, maka objek itu membuang ConcurrentModificationException. Contohnya: jika semasa mengulangi koleksi, kami terus cuba mengubah suai koleksi itu, maka fail-fast iterator akan membuang ConcurrentModificationException ini.

Apakah pengecualian pengubahsuaian serentak dalam limpahan tindanan Java?

Jika utas tunggal mengeluarkan urutan penyebutan kaedah yang melanggar kontrak objek, objek boleh membuang pengecualian ini. Sebagai contoh, jika urutan mengubah suai koleksi secara langsung semasa ia berulang ke atas koleksi dengan lelaran yang gagal-cepat, iterator akan membuang pengecualian ini.

Disyorkan: