কম্পিউটার

জাভাতে একটি সংগ্রহের পুনরাবৃত্তি করার সময় কিভাবে ConcurrentModificationException এড়ানো যায়?


আপনি যখন সংগ্রহের বস্তুর সাথে কাজ করছেন, যখন একটি থ্রেড একটি নির্দিষ্ট সংগ্রহের বস্তুর উপর পুনরাবৃত্তি করছে, যদি আপনি এটি থেকে উপাদানগুলি যোগ বা অপসারণ করার চেষ্টা করেন, একটি সমবর্তী পরিবর্তন ব্যতিক্রম নিক্ষেপ করা হবে৷

শুধু তাই নয়, যদি আপনি একটি সংগ্রহের বস্তুর পুনরাবৃত্তি করেন, তাহলে এতে উপাদান যোগ করুন বা সরান এবং এর বিষয়বস্তু আবার পুনরাবৃত্তি করার চেষ্টা করুন এটি বিবেচনা করা হয় যে আপনি একাধিক থ্রেড ব্যবহার করে সংগ্রহের বস্তুটি অ্যাক্সেস করার চেষ্টা করছেন এবং ConcurrentModificationException নিক্ষেপ করা হয়েছে।

উদাহরণ

import java.util.ArrayList;
import java.util.Iterator;
public class OccurenceOfElements {
   public static void main(String args[]) {
      ArrayList <String> list = new ArrayList<String>();
      //Instantiating an ArrayList object
      list.add("JavaFX");
      list.add("Java");
      list.add("WebGL");
      list.add("OpenCV");
      System.out.println("Contents of the array list (first to last): ");
      Iterator<String> 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)

একাধিক থ্রেড থেকে সংগ্রহের বস্তুগুলি অ্যাক্সেস করার সময় এটি সমাধান করতে সিঙ্ক্রোনাইজড ব্লক বা পদ্ধতি ব্যবহার করুন এবং, যদি আপনি এটি পুনরুদ্ধার করার সময় ডেটা পরিবর্তন করেন তবে ডেটা পরিবর্তন করার পরে আবার ইটারেটর অবজেক্টটি পান৷

উদাহরণ

import java.util.ArrayList;
import java.util.Iterator;
public class OccurenceOfElements {
   public static void main(String args[]) {
      ArrayList <String> list = new ArrayList<String>();
      //Instantiating an ArrayList object
      list.add("JavaFX");
      list.add("Java");
      list.add("WebGL");
      list.add("OpenCV");
      System.out.println("Contents of the array list (first to last): ");
      Iterator<String> 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.

  1. কিভাবে একটি ArrayList শুধুমাত্র জাভাতে পড়া যায়?

  2. কিভাবে আমরা জাভাতে JSONObject এ একটি JSONArray যোগ করতে পারি?

  3. জাভাতে সংগ্রহ এবং সংগ্রহের মধ্যে পার্থক্য?

  4. কিভাবে আমরা জাভা একটি অচলাবস্থা এড়াতে পারি?