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

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

जब आप संग्रह ऑब्जेक्ट के साथ काम कर रहे होते हैं, जबकि एक थ्रेड किसी विशेष संग्रह ऑब्जेक्ट पर पुनरावृति कर रहा होता है, यदि आप इसमें तत्वों को जोड़ने या निकालने का प्रयास करते हैं, तो एक ConcurrentModificationException को फेंक दिया जाएगा।

इतना ही नहीं, यदि आप किसी संग्रह वस्तु को पुनरावृत्त कर रहे हैं, तो उसमें तत्वों को जोड़ें या निकालें और इसकी सामग्री को फिर से पुनरावृत्त करने का प्रयास करें, यह माना जाता है कि आप कई थ्रेड्स का उपयोग करके संग्रह वस्तु तक पहुंचने का प्रयास कर रहे हैं और ConcurrentModificationException को फेंक दिया गया है।

उदाहरण

आयात करें // एक ArrayList ऑब्जेक्ट सूची को तुरंत चालू करना। जोड़ें ("JavaFX"); सूची जोड़ें ("जावा"); सूची जोड़ें ("वेबजीएल"); सूची जोड़ें ("ओपनसीवी"); System.out.println ("सरणी सूची की सामग्री (पहले से अंतिम):"); इटरेटर <स्ट्रिंग> यह =list.iterator (); जबकि (it.hasNext ()) {System.out.print(it.next ()+", "); }//सूची.निकालें(3); list.add(3, "हडूप"); जबकि (it.hasNext ()) {System.out.print(it.next ()+", "); } }}

आउटपुट

सरणी सूची की सामग्री (पहली से अंतिम):JavaFX, Java, WebGL, OpenCV, Exception in thread "main" java.util.ConcurrentModificationException at java.util.ArrayList$Itr.checkForComodification(Unknown Source) java. util.ArrayList$Itr.next(अज्ञात स्रोत) नमूना पर। OccurenceOfElements.main(OccurenceOfElements.java:23)

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

उदाहरण

आयात करें // एक ArrayList ऑब्जेक्ट सूची को तुरंत चालू करना। जोड़ें ("JavaFX"); सूची जोड़ें ("जावा"); सूची जोड़ें ("वेबजीएल"); सूची जोड़ें ("ओपनसीवी"); System.out.println ("सरणी सूची की सामग्री (पहले से अंतिम):"); इटरेटर <स्ट्रिंग> यह =list.iterator (); जबकि (it.hasNext ()) {System.out.print(it.next ()+" "); } सूची.निकालें(3); System.out.println (""); System.out.println ("हटाने के बाद सरणी सूची की सामग्री:"); यह =सूची। इटरेटर (); जबकि (it.hasNext ()) {System.out.print(it.next ()+" "); } }}

आउटपुट

सरणी सूची की सामग्री (पहले से अंतिम):JavaFX. जावा। वेबजीएल. OpenCV. हटाने के बाद सरणी सूची की सामग्री:JavaFX. जावा। वेबजीएल.

  1. हम जावा में JSONObject में JSONArray कैसे जोड़ सकते हैं?

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

  1. जावा में संग्रह और संग्रह के बीच अंतर?

    संग्रह एक इंटरफ़ेस है जबकि संग्रह एक उपयोगिता . है जावा में कक्षा। सेट, सूची, और कतार संग्रह . के कुछ उप-इंटरफ़ेस हैं इंटरफ़ेस, एक मानचित्र इंटरफ़ेस संग्रह . का भी हिस्सा है फ्रेमवर्क, लेकिन यह इनहेरिट नहीं करता संग्रह इंटरफेस। संग्रह . के महत्वपूर्ण तरीके इंटरफ़ेस हैं जोड़ें (), हटाएं (),

  1. हम जावा में गतिरोध से कैसे बच सकते हैं?

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