क्या समवर्ती है हाशिएप का फॉरएच विधि धागा सुरक्षित है? [डुप्लिकेट]
यदि समवर्ती हाशप में सभी तत्वों पर पुनरावृति करना चाहते हैं, तो forEach
विधि थ्रेड-सेफ का उपयोग कर रहे हैं?
जवाब
यह निर्भर करता है कि थ्रेड-सेफ से आपका क्या मतलब है।
- यदि आप
forEach
कॉल के बीच में रहते हुए मानचित्र को संशोधित करने में सक्षम हैं , तो हाँ, यह थ्रेड-सुरक्षित है। - यदि आप चाहते हैं कि मानचित्र
forEach
प्रगति के दौरान अपरिवर्तनीय हो , जैसे कि अन्य थ्रेड्स अवरुद्ध हो जाते हैं या त्रुटि हो जाती है यदि वे इसे संशोधित करने का प्रयास करते हैं तो नहीं, यह नहीं है।
API दस्तावेज़ का कहना है:
हालाँकि, भले ही सभी ऑपरेशन थ्रेड-सुरक्षित हैं, फिर भी पुनर्प्राप्ति ऑपरेशन लॉकिंग में प्रवेश नहीं करते हैं, और पूरी तालिका को एक तरह से लॉक करने के लिए कोई समर्थन नहीं है जो सभी पहुंच को रोकता है।
...
इसी तरह, Iterators, Spliterators और Enumerations वापसी तत्व की स्थिति को दर्शाते हुए हैशटेर / एन्यूमरेशन के निर्माण के बाद या कुछ बिंदु पर हैश तालिका की स्थिति को दर्शाते हैं। वे फेंकते नहीं हैं
ConcurrentModificationException
.... यह ध्यान रखें कि समग्र स्थिति विधियों के परिणाम ... आम तौर पर केवल तब उपयोगी होते हैं जब कोई नक्शा अन्य थ्रेड्स में समवर्ती अपडेट से गुजर नहीं रहा हो। अन्यथा इन विधियों के परिणाम क्षणिक अवस्थाओं को दर्शाते हैं जो निगरानी या अनुमान उद्देश्यों के लिए पर्याप्त हो सकते हैं, लेकिन कार्यक्रम नियंत्रण के लिए नहीं।