যখন আপনি কালেকশন অবজেক্ট নিয়ে কাজ করছেন, একটি থ্রেড একটি নির্দিষ্ট কালেকশন অবজেক্টের ওপর ইটারেট করছে, সেটি যদি আপনি সেটিতে এলিমেন্ট যোগ বা মুছে ফেলতে চান, তবে ConcurrentModificationException থ্রো হবে।
শুধুই নয়, যদি আপনি একটি কালেকশন অবজেক্ট ইটারেট করছেন, সেটিতে এলিমেন্ট যোগ বা মুছে ফেলেন এবং আবার এর কন্টেন্ট ইটারেট করার চেষ্টা করেন তবে এটি মনে করা হয় যে আপনি একাধিক থ্রেড ব্যবহার করে কালেকশন অবজেক্ট অ্যাক্সেস করার চেষ্টা করছেন এবং ConcurrentModificationException থ্রো হয়।
উদাহরণ
import java.util.ArrayList;
import java.util.Iterator;
public class OccurenceOfElements {
public static void main(String args[]) {
ArrayList list = new ArrayList();
// ArrayList অবজেক্ট ইনস্ট্যানশিয়েট করা
list.add("JavaFX");
list.add("Java");
list.add("WebGL");
list.add("OpenCV");
System.out.println("Contents of the array list (first to last): ");
Iterator it = list.iterator();
while (it.hasNext()) {
System.out.print(it.next() + ", ");
}
// list.remove(3);
list.add(3, "Hadoop");
while (it.hasNext()) {
System.out.print(it.next() + ", ");
}
}
}
আউটপুট
Contents of the array list (first to last): JavaFX, Java, WebGL, OpenCV,
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(Unknown Source)
at java.util.ArrayList$Itr.next(Unknown Source)
at sample.OccurenceOfElements.main(OccurenceOfElements.java:23)
এটি সমাধান করতে কালেকশন অবজেক্ট একাধিক থ্রেড থেকে অ্যাক্সেস করার সময় সিনক্রোনাইজড ব্লক বা মেথড ব্যবহার করুন এবং, যদি আপনি ডেটা রিট্রিভ করার সময় মডিফাই করেন, তবে ডেটা মডিফাই করার পরে আবার Iterator অবজেক্ট পান।
উদাহরণ (সমাধান)
import java.util.ArrayList;
import java.util.Iterator;
public class OccurenceOfElements {
public static void main(String args[]) {
ArrayList list = new ArrayList();
// ArrayList অবজেক্ট ইনস্ট্যানশিয়েট করা
list.add("JavaFX");
list.add("Java");
list.add("WebGL");
list.add("OpenCV");
System.out.println("Contents of the array list (first to last): ");
Iterator it = list.iterator();
while (it.hasNext()) {
System.out.print(it.next() + ". ");
}
list.remove(3);
System.out.println("");
System.out.println("Contents of the array list after removal: ");
it = list.iterator(); // নতুন ইটারেটর নেওয়া
while (it.hasNext()) {
System.out.print(it.next() + ". ");
}
}
}
আউটপুট
Contents of the array list (first to last): JavaFX. Java. WebGL. OpenCV. Contents of the array list after removal: JavaFX. Java. WebGL.