गुवा के इम्यूटेबल लिस्ट.बिल्डर के लिए थ्रेड सुरक्षा गारंटी क्या हैं? जावाडॉक्स नहीं कहते हैं।क्या अमरूद की अपरिवर्तनीय सूची है। बिल्डर धागा सुरक्षित है?
उत्तर
जबकि अमरूद अपरिवर्तनीय कक्षाएं थ्रेडसेफ हैं, उनके निर्माता नहीं हैं। अधिकांश अनुप्रयोगों के लिए, केवल एक धागा किसी भी विशेष बिल्डर उदाहरण के साथ बातचीत करेगा।
जबकि थ्रेड-सुरक्षा की अनुपस्थिति को आम तौर पर दस्तावेज करने की आवश्यकता नहीं होती है, ऐसे जावाडोक अपरिवर्तनीय संग्रह बिल्डरों के लिए समझ में आ सकते हैं। लोग आश्चर्यचकित हो सकते हैं कि ImmutableList थ्रेडसेफ है जबकि ImmutableList.builder नहीं है।
यदि javadocs में थ्रेड-सुरक्षा का उल्लेख नहीं किया गया है, तो इसे मानें मत!
अधिक गंभीरता से, "नहीं"।
मैं इम्यूटेबललिस्ट के जावडॉक्स को भी पसंद करूंगा और दोस्तों में इस तरह के एक-स्पष्ट स्पष्ट, हां-टिप्पणी (इसलिए आपको इसे स्वयं ग्रहण नहीं करना पड़ेगा), क्योंकि "स्पष्ट" हमेशा मामला नहीं है। बस दूसरे दिन मैं scala.List
पर चर्चा कर रहा था, एक अपरिवर्तनीय सूची, और कुछ surprizing मुद्दों का कारण हो सकता है अगर धागे के बीच आदान-प्रदान (डेटा रेस के माध्यम से), जो लोगों ने नहीं सोचा था क्योंकि वे टिन पर "अपरिवर्तनीय" शब्द देखते हैं , साथ ही वे "अपरिवर्तनीय == थ्रेड-सुरक्षित" समझाते हैं, इसलिए यह "स्पष्ट" थ्रेड-सुरक्षा पहलुओं को दस्तावेज करते समय भी सुरक्षित पक्ष पर रहने का भुगतान करता है।
@ डिमिटिस एंड्रयू के साथ सहमत: निश्चित रूप से थ्रेड सुरक्षा नहीं मानते हैं, अगर ऐसा दस्तावेज नहीं है। जब आप एक गैर-तुच्छ वर्ग थ्रेडसेफ बनाने के प्रयास में जाते हैं, तो आप उपयोगकर्ताओं को यह जानने के लिए चाहते हैं।
इसके अलावा, मुझे लगता है कि एक निर्माता के लिए सबसे आम उपयोग केस थ्रेड-सीमित होगा: यानी किसी विधि में स्थानीय चर के रूप में। यदि आपको सूची बनाने के लिए कई धागे की आवश्यकता है, तो अभी तक वास्तव में अपरिवर्तनीय है?
यदि आपके पास एक सूची में खिलाने वाले कई धागे हैं, लेकिन किसी बिंदु पर इसे स्नैपशॉट करना चाहते हैं और कहें कि "आगे बढ़ने में कोई और बदलाव नहीं है, तो यह अपरिवर्तनीय" है, तो मैं कुछ लिखूंगा जो तत्वों को उन धागे से लेता है और जमा करता है जब आप इसे तैयार करते हैं तो एक नई अपरिवर्तनीय सूची में सामग्री।
क्या आपके पास सबूत है? लेख "अपरिवर्तनीय संग्रह" (https://github.com/google/guava/wiki/ImmutableCollectionsExplained) कहता है "अपरिवर्तनीय वस्तुओं का उपयोग कई धागे द्वारा किया जा सकता है" लेकिन यह स्पष्ट रूप से नहीं कहता है "गुवा इमटेबल संग्रह थ्रेड-सुरक्षित है" । मैं अभी भी यकीन नहीं कर रहा हूँ :-( – 30thh