2010-01-19 18 views
6

थ्रेड-सुरक्षा और अपरिवर्तनीय वस्तुओं के साथ संबंध क्या है? क्या एकाधिक धागे के बीच एक संसाधन साझा करना आसान बनाता है? यदि अपरिवर्तनीय वस्तुएं स्टेटलेस हैं, तो क्या उन्हें एक जे 2 ईई कंटेनर जैसे कंटेनर में पूल किया जा सकता है?अपरिवर्तनीय वस्तुएं क्या हैं?

धन्यवाद

उत्तर

5

थ्रेडसेफ ऑब्जेक्ट्स वे ऑब्जेक्ट्स हैं जो एकाधिक धागे द्वारा समवर्ती रूप से उपयोग की अनुमति देते हैं। उनके कार्यान्वयन की गारंटी है (उदाहरण के लिए लॉकिंग/सिंक्रनाइज़ किए गए तरीकों/...) कि वे एक अमान्य स्थिति में नहीं जाएंगे। इसके अलावा, डेटा का कोई नुकसान नहीं होना चाहिए।

अपरिवर्तनीय वस्तुओं को उनके निर्माण के बाद बदला नहीं जा सकता है। तो: हाँ, वे किसी तरह के स्टेटलेस हैं।

चूंकि अपरिवर्तनीय वस्तुओं को बदला नहीं जा सकता है, लॉक करने की कोई आवश्यकता नहीं है - ऑब्जेक्ट्स तक पहुंच पढ़ने हमेशा थ्रेडसेफ होता है (चर को संशोधित नहीं करते समय)। इसलिए, असली अपरिवर्तनीय वस्तुएं हमेशा थ्रेडसेफ होती हैं।

+1

आम तौर पर स्टेटलेस ऑब्जेक्ट्स में कोई राज्य नहीं है। अपरिवर्तनीय वस्तुएं किसी एक अलग राज्य में उनके द्वारा बनाए गए स्थान से संक्रमण नहीं कर सकती हैं, इसलिए उनके पास बिल्कुल एक राज्य है। –

4

अपरिवर्तनीय ऑब्जेक्ट: एक उद्देश्य यह है कि अपनी आंतरिक स्थिति नहीं बदलता है।

थ्रेड-सुरक्षा के साथ संबंध: यदि किसी वस्तु को उत्परिवर्तित नहीं किया जा सकता है, तो इसे धागे में उपयोग करना सुरक्षित है यानी ताले या स्थिरता थ्रेड में सुनिश्चित करने की आवश्यकता नहीं है।

10

अपरिवर्तनीय वस्तुएं ऐसी वस्तुएं हैं जिन्हें बदला नहीं जा सकता है। यदि कोई ऑब्जेक्ट नहीं बदला जा सकता है, तो कोई चिंता नहीं है कि एक प्रतिस्पर्धी धागा निष्पादन धागे के "पीछे के पीछे" ऑब्जेक्ट स्थिति को बदल देगा, और इसलिए अपरिवर्तनीय वस्तुओं को सिंक्रनाइज़ेशन या किसी अन्य तकनीक के माध्यम से संरक्षित करने की आवश्यकता नहीं है।

+1

यदि ऑब्जेक्ट स्टेटलेस है तो अपरिवर्तनीयता के बारे में बात करने के लिए व्यर्थ है, क्योंकि उत्परिवर्तन करने की कोई स्थिति नहीं है। तो एक कंटेनर में वस्तुओं को पूल करने के लिए सुरक्षित है। – Mauricio

+0

विचार करने की एक बात यह है कि यदि आप किसी ऑब्जेक्ट को इंगित करने वाले चर को पुन: असाइन करके एक अपरिवर्तनीय ऑब्जेक्ट (कहें, एक स्ट्रिंग) को बदलने का प्रयास करते हैं, तो अन्य थ्रेड उस परिवर्तन को नहीं देख पाएंगे। इसलिए एक अपरिवर्तनीय वस्तु में "परिवर्तन" धागे में साझा नहीं किए जा सकते हैं। – Aaron

+0

यदि आप किसी ऑब्जेक्ट को संदर्भित करते हुए किसी ऑब्जेक्ट को पुन: असाइन करके किसी ऑब्जेक्ट को 'चालू' करते हैं, तो आप नहीं जानते कि आप क्या कर रहे हैं। –

संबंधित मुद्दे