Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Java

Java में संग्रह को पुनरावृत्त करते समय ConcurrentModificationException से कैसे बचें?


जब आप संग्रह ऑब्जेक्ट्स के साथ काम कर रहे होते हैं, जब एक थ्रेड किसी विशेष संग्रह ऑब्जेक्ट पर पुनरावृत्त कर रहा होता है, यदि आप इसमें तत्व जोड़ने या हटाने का प्रयास करते हैं, तो एक 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)

इसे हल करने के लिए संग्रह ऑब्जेक्ट्स को कई थ्रेड्स से एक्सेस करते समय सिंक्रोनाइज़्ड ब्लॉक या विधि का उपयोग करें और, यदि आप डेटा को पुनर्प्राप्त करते समय संशोधित कर रहे हैं, तो डेटा संशोधित करने के बाद इटरेटर ऑब्जेक्ट को फिर से प्राप्त करें।

उदाहरण

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.

  1. - Java में JSONArray को JSONObject में कैसे जोड़ें?

    JSON डेटा एक्सचेंज के लिए एक टेक्स्ट-आधारित फॉर्मेट है। यह एक हल्का घटक है और भाषा-स्वतंत्र। हम JSONArray को JSONObject में भी जोड़ सकते हैं। हमें पहले ArrayList में कुछ आइटम्स जोड़ने की जरूरत है और इस लिस्ट को JSONArray क्लास के put() मेथड में पास करना है और अंत में put() मेथड का उपयोग करके इस ऐरे

  1. - जावा में Collection और Collections में अंतर?

    Collection एक इंटरफेस है जबकि Collections जावा में एक यूटिलिटी क्लास है। Set, List, और Queue Collection इंटरफेस के कुछ सबइंटरफेस हैं, एक Map इंटरफेस भी Collections फ्रेमवर्क का हिस्सा है, लेकिन यह Collection इंटरफेस को इनहेरिट नहीं करता। Collection इंटरफेस के महत्वपूर्ण मेथड्स हैं add(), remove(),

  1. - जावा में डेडलॉक से कैसे बचें?

    जावा में, एक डेडलॉक एक प्रोग्रामिंग स्थिति है जहां दो या अधिक थ्रेड्स हमेशा के लिए ब्लॉक हो जाते हैं। डेडलॉक स्थिति कम से कम दो थ्रेड्स और दो या अधिक संसाधनों के साथ होती है। डेडलॉक से कैसे बचें नेस्टेड लॉक्स से बचें: डेडलॉक मुख्य रूप से तब होता है जब हम कई थ्रेड्स को लॉक देते हैं। यदि हम पहले से