. Pengecualian ini timbul kerana keadaan dalaman koleksi menjadi tidak konsisten. ConcurrentModificationException
<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>
modCount
algoritma untuk menghasilkan semula pengecualian
Algoritma ini menunjukkan cara mencetuskan di Java: ConcurrentModificationException
ArrayList
ArrayList
list.iterator()
ArrayList
ConcurrentModificationException
Kod ini akan membuang
kerana<code class="language-java">import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class ConcurrentModificationExample { public static void main(String[] args) { List<integer> myList = new ArrayList<>(); myList.add(1); myList.add(2); myList.add(3); Iterator<integer> iterator = myList.iterator(); while (iterator.hasNext()) { Integer value = iterator.next(); System.out.println("Value: " + value); if (value == 2) { myList.remove(value); // Modification during iteration! } } } }</integer></integer></code>
ConcurrentModificationException
myList.remove(value)
Teknik pengubahsuaian selamat
Untuk mengelakkan pengecualian ini, gunakan pendekatan ini:
Gunakan kaedah untuk menghapuskan unsur -unsur semasa lelaran. Kaedah ini selamat kerana ia direka untuk bekerja dengan keadaan dalaman iterator. Iterator.remove()
iterator.remove()
atau .
CopyOnWriteArrayList
ConcurrentHashMap
Contohnya: Penyingkiran selamat menggunakan
Kod yang disemak ini dengan selamat menghilangkan elemen tanpa membuang pengecualian. Ingatlah untuk memilih teknik yang sesuai berdasarkan keperluan khusus anda dan keperluan konvensional. Menggunakan koleksi serentak biasanya disukai untuk senario multithreaded. Iterator.remove()
Atas ialah kandungan terperinci ConcurrentModificationException semasa menggunakan Iterator di Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!