Rumah >Java >javaTutorial >Bagaimanakah Saya Boleh Mengelakkan ConcurrentModificationException Apabila Mengulang dan Mengubah Suai Senarai Java?
ConcurrentModificationException berlaku apabila berbilang benang secara serentak mengubah suai koleksi boleh ubah, selalunya melanggar ketekalan dalamannya. Untuk menggambarkan konsep ini, mari kita analisa coretan kod yang menghadapi pengecualian ini.
import java.util.*; public class ConcurrentModificationExample { public static void main(String[] args) { List<String> s = new ArrayList<>(); ListIterator<String> it = s.listIterator(); for (String a : args) s.add(a); if (it.hasNext()) String item = it.next(); System.out.println(s); } }
Kod ini cuba melelang melalui senarai sambil menambahkan elemen padanya. Walau bagaimanapun, pengecualian dilemparkan kerana ListIterator telah dibuat sebelum elemen ditambahkan.
Untuk mengelakkan ralat ini, kita boleh mengubah suai kod seperti berikut:
import java.util.*; public class ConcurrentModificationExample { public static void main(String[] args) { List<String> s = new ArrayList<>(); for(String a : args) s.add(a); ListIterator<String> it = s.listIterator(); if(it.hasNext()) { String item = it.next(); } System.out.println(s); } }
Dalam kod yang disemak ini, iterator senarai dibuat selepas elemen telah ditambahkan pada senarai, memastikan konsistensi. ListIterator membenarkan pengubahsuaian senarai semasa lelaran, tetapi adalah penting bahawa ia dibuat selepas senarai dimulakan dan tidak diubah suai antara penciptaan dan penggunaan. Ini memastikan senarai kekal dalam keadaan sah sepanjang lelaran.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengelakkan ConcurrentModificationException Apabila Mengulang dan Mengubah Suai Senarai Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!