सिंक्रनाइज़ तरीकों का उपयोग करते समय समवर्ती संशोधन अपवाद से बचना
समवर्ती संशोधन अपवाद त्रुटि आम तौर पर संग्रह में किए गए संशोधनों के कारण होती है, एक पुनरावर्तक लूप के भीतर पुनरावृत्त हो रहा है शरीर। विधि घोषणा में एक सिंक्रनाइज़ कीवर्ड की उपस्थिति के बावजूद, इस अपवाद का अभी भी सामना किया जा सकता है।
प्रदान किए गए कोड स्निपेट में:
public synchronized X getAnotherX(){ if(iterator.hasNext()){ X b = iterator.next(); String name = b.getInputFileName(); ... return b; } else{return null;} }
त्रुटि संभवतः इसलिए उत्पन्न हो रही है क्योंकि एक बाहरी थ्रेड अंतर्निहित संग्रह को संशोधित कर रहा है जबकि पुनरावर्तक उस पर पुनरावृत्ति कर रहा है। इस संशोधन में तत्वों को जोड़ना या हटाना शामिल हो सकता है।
इस समस्या का समाधान यह सुनिश्चित करना है कि कोई अन्य थ्रेड पुनरावृत्ति के दौरान संग्रह को संशोधित नहीं कर सकता है। इसे संग्रह पर पुनरावृत्त करने से पहले उसकी एक प्रति बनाकर प्राप्त किया जा सकता है। हालाँकि, यदि यह संभव नहीं है, तो पुनरावर्तक को थ्रेड-सुरक्षित तरीके से प्राप्त किया जाना चाहिए। यह Collections.synchronizedList() पद्धति का उपयोग करके या संग्रह के लिए एक कस्टम सिंक्रोनाइज़ेशन रैपर बनाकर किया जा सकता है। सुरक्षित रूप से।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3