अन्य सभी परमाणु वस्तुओं के लिए समान है? एक परमाणु इंटेगर के लिए सवाल को समझना आसान है। चूंकि अधिक 1 धागा myInt के संदर्भ तक पहुंच रहा है, क्या यह संभव नहीं है कि एक थ्रेड पंजीकृत कैश किए गए मान को देखता है, उदाहरण के लिए शून्य, इस ऑब्जेक्ट के लिए, जब तक इसे अस्थिर घोषित नहीं किया जाता है? अगर नहीं आते हैं?क्या परमाणु संदर्भ को अस्थिर घोषित करना आवश्यक है?
उत्तर
न केवल यह आवश्यक है, यह वास्तव में अर्थात् गलत है। AtomicReference
अपने भीतर "असली" संदर्भ रखता है, और इसकी अपनी सिंक्रनाइज़ेशन संरचनाओं का उपयोग करके इसका उपयोग करता है। JVM का स्वयं सिंक्रनाइज़ेशन संरचना (synchronized
, volatile
, आदि) और उपयोग नहीं किया गया है। AtomicReference
ऑब्जेक्ट को खुद को अस्थिर नहीं माना जाना चाहिए। अगर कुछ भी है, तो इसे final
बनाने पर विचार करें।
भी विचार this question - volatile
AtomicReference
का उपयोग कर, अगर आप सभी की जरूरत हो और संचालन सेट किया गया है के लिए एक विकल्प माना जा सकता है।
क्यों नहीं? एक समवर्ती मानचित्र वैध कारण के लिए एक अस्थिर क्षेत्र द्वारा अच्छी तरह से पकड़ सकता है, और मुझे नहीं लगता कि यह "परमाणु" वस्तुओं के लिए क्यों सच नहीं होना चाहिए? –
@ एनो: निश्चित रूप से, मुझे लगता है कि आप एक परिदृश्य को बना सकते हैं जहां यह उचित होगा। यदि आप कोड में 'अस्थिर परमाणु संदर्भ' देखना चाहते थे, हालांकि, यह निश्चित रूप से लेखक के इरादे से नहीं होगा। – skaffman
@ स्काफमैन: निश्चित रूप से परमाणु संदर्भ में लक्ष्य वस्तु के वास्तविक संदर्भ हैं, लेकिन मैं इस परमाणु संदर्भ वस्तु के संदर्भ का जिक्र कर रहा हूं। लेकिन वास्तव में मैं इसे अंतिम बना सकता हूं, और यह भी सही समझ में आता है। धन्यवाद! –
"परमाणु" वस्तुएं अपरिवर्तनीय नहीं हैं, इसलिए यदि वे ठीक से प्रकाशित होते हैं तो उन्हें थ्रेड सुरक्षित होना चाहिए। उदाहरण के लिए, जब आप ऐसा कुछ करते हैं, तो आपको अस्थिर कीवर्ड का उपयोग करने की आवश्यकता होगी।
volatile AtomicInteger counter = // initialize counter
int harvest(){
AtomicInteger old = counter;
counter = new AtomicInteger();
return old.get();
}
आप ऊपर कोड से अस्थिर निकालते हैं, तो आप वास्तव में कुछ वेतन वृद्धि खो सकता है। Spec के अनुसार, आप एक परमाणु इंटेगर ऑब्जेक्ट का भी संदर्भ प्राप्त कर सकते हैं जो पूरी तरह से निर्मित नहीं है, और इस प्रकार अपरिभाषित व्यवहार प्राप्त करता है।
तो, क्या आपको अपनी परमाणु वस्तु को अस्थिर घोषित करने की आवश्यकता है? उत्तर है, यह निर्भर करता है। जब तक कि वे किसी भी अन्य थ्रेड सुरक्षित ऑब्जेक्ट्स (अपरिवर्तनीय वस्तुओं को छोड़कर, विशेष मामले हैं) के रूप में, जब तक वे ठीक से प्रकाशित होते हैं, वे केवल थ्रेड सुरक्षित होते हैं। ज्यादातर मामलों में, आपको उन्हें अंतिम बनाना चाहिए।
- 1. जावा में परमाणु संदर्भ - थ्रेड-सुरक्षित वातावरण में संदर्भ स्थापित करने के लिए आवश्यक है?
- 2. क्या लॉक वैरिएबल को अस्थिर घोषित किया जाना चाहिए?
- 3. क्या अस्थिरता आवश्यक है?
- 4. जावा - क्या मुझे अपने साझा श्रोता सदस्य चर को अस्थिर घोषित करना है?
- 5. क्या लिखें परमाणु परमाणु है?
- 6. क्या डेटाबेस को बंद करना आवश्यक है?
- 7. संदर्भ प्रकार के लिए अस्थिर .net 4.0
- 8. यदि अस्थिर थ्रेडिंग के लिए बेकार है, तो परमाणु संचालन को पॉइंटर्स को अस्थिर डेटा की आवश्यकता क्यों होती है?
- 9. क्या खाली कक्षा घोषित करना बुरा है?
- 10. क्या संचालन परमाणु संचालन
- 11. जावा अस्थिर संदर्भ बनाम AtomicReference
- 12. संदर्भ असाइनमेंट परमाणु है तो इंटरलाक्ड क्यों है। एक्सचेंज (रेफ ऑब्जेक्ट, ऑब्जेक्ट) की आवश्यकता है?
- 13. मोड को घोषित करना
- 14. अस्थिर कीवर्ड का उपयोग क्या है?
- 15. परमाणु संदर्भ बनाने के लिए संभव है जिसे परमाणु रूप से बदला जा सकता है?
- 16. क्या अस्थिर कभी भी ब्लॉक स्विच या संदर्भ स्विच शामिल करता है?
- 17. चार अस्थिर और आवश्यक क्यों और कब डाला जाता है?
- 18. जबकि (! अस्थिर) क्या करता है; कर?
- 19. क्यों अस्थिर पर्याप्त नहीं है?
- 20. क्या मुझे इस क्षेत्र को अस्थिर होने की आवश्यकता है?
- 21. क्या लाइब्रेरी कक्षाओं को आगे घोषित करना उचित है?
- 22. HttpURLConnection: कनेक्ट() को कॉल करना आवश्यक है?
- 23. अस्थिर वर्ग वस्तु को परिभाषित करना
- 24. सी/पर्थ्रेड का उपयोग करना: साझा चर को अस्थिर होने की आवश्यकता है?
- 25. $ _SERVER ['REMOTE_ADDR'] को सत्यापित करना आवश्यक है?
- 26. क्या मुझे स्थिर अस्थिर चर को सिंक्रनाइज़ करना चाहिए?
- 27. एरलांग, क्या यहां फ़ाइल को बंद करना आवश्यक है?
- 28. क्या अभी भी $ (विंडो) .scroll() को थ्रॉटल करना आवश्यक है?
- 29. क्या विभिन्न वर्गों से चालकों को स्थानांतरित करना आवश्यक है?
- 30. परमाणु चर पर अस्थिर आदिम का उपयोग करने के बीच क्या अंतर है?
मैं सभी परमाणु संदर्भ फ़ील्ड को अंतिम बनाने की कोशिश करता हूं। आपको इसे बदलने की जरूरत से बचने चाहिए। –