वहाँ एक volatile
वस्तु संदर्भ और AtomicReference
मामले में मैं सिर्फ AtomicReference
से get()
और set()
-methods का प्रयोग करेंगे के बीच कोई अंतर है?जावा अस्थिर संदर्भ बनाम AtomicReference
उत्तर
कम जवाब है: नहीं
java.util.concurrent.atomic package doc से:
पहुंच और एटोमिक्स के अपडेट के लिए स्मृति प्रभाव आम तौर पर वाष्पशील के लिए नियमों का पालन करें:
get
मेमोरी हैvolatile
चर पढ़ने के प्रभाव।set
मेंvolatile
चर लिखने (असाइनिंग) के स्मृति प्रभाव हैं।
तरह से, पैकेज के लिए डॉक बहुत अच्छा है और सब कुछ समझाया गया है द्वारा ...
lazySet
(जावा 6 में प्रस्तुत) एक नए शुरू की आपरेशन पहुंच से बाहर का अर्थ विज्ञान है कि volatile
चर के माध्यम से; अधिक जानकारी के लिए this post देखें।
नहीं, ऐसा नहीं है।
परमाणु संदर्भ द्वारा प्रदान की गई अतिरिक्त शक्ति तुलना एंडसेट() विधि और दोस्तों है। यदि आपको उन तरीकों की आवश्यकता नहीं है, तो एक अस्थिर संदर्भ समान अर्थशास्त्र को AtomicReference.set() और .get() के रूप में प्रदान करता है।
परमाणु संदर्भ अतिरिक्त कार्यक्षमता प्रदान करता है जो एक सादा अस्थिर चर प्रदान नहीं करता है। जैसा कि आपने एपीआई पढ़ा है, आपको यह पता चलेगा, लेकिन यह एक लॉक भी प्रदान करता है जो कुछ परिचालनों के लिए उपयोगी हो सकता है।
हालांकि, जब तक आपको यह अतिरिक्त कार्यक्षमता की आवश्यकता नहीं है, तो मेरा सुझाव है कि आप एक सादा अस्थिर क्षेत्र का उपयोग करें।
तो अंतर, फिर, में है उनका प्रदर्शन। यदि कोई अंतर नहीं था, तो आप कभी भी एक दूसरे का उपयोग करने का सुझाव नहीं देंगे। –
प्रदर्शन काफी समान है। एक परमाणु रिफ्रेंस जटिलता और स्मृति उपयोग जोड़ता है। –
@ बीटी ए 'अस्थिर' फ़ील्ड का उपयोग किसी भी नियमित क्षेत्र की तरह किया जा सकता है जबकि 'परमाणु संदर्भ' में मूल्य तक पहुंचने के लिए 'get' और' set' विधियों के माध्यम से जाना आवश्यक है। –
JDK source code इस तरह के भ्रम का जवाब देने के सर्वोत्तम तरीकों में से एक है। यदि आप AtomicReference में कोड देखते हैं, तो यह ऑब्जेक्ट स्टोरेज के लिए एक वॉलेट चर का उपयोग करता है।
private volatile V value;
तो, जाहिर है, अगर तुम सिर्फ AtomicReference पर सेट() प्राप्त() और उपयोग करने के लिए जा रहे हैं यह एक अस्थिर चर का उपयोग कर की तरह है। लेकिन जैसा कि अन्य पाठकों ने टिप्पणी की, परमाणु संदर्भ अतिरिक्त सीएएस अर्थशास्त्र प्रदान करता है। तो, पहले तय करें कि क्या आप सीएएस अर्थशास्त्र चाहते हैं या नहीं, और यदि आप केवल तब ही परमाणु संदर्भ का उपयोग करते हैं।
* "जेडीके स्रोत कोड इस तरह के भ्रम का जवाब देने के सर्वोत्तम तरीकों में से एक है" * => मैं जरूरी नहीं है - जावडोक (जो कक्षा का अनुबंध है) सबसे अच्छा तरीका है। कोड में आपको जो मिलता है वह एक विशिष्ट कार्यान्वयन के लिए प्रश्न का उत्तर देता है लेकिन कोड बदल सकता है। – assylias
उदाहरण के लिए [यह चर] [http://stackoverflow.com/a/14363501/829571) हैशैप में जेडीके 6 में अस्थिर था लेकिन जावा 7 में अब अस्थिर नहीं है। क्या आपने इस तथ्य पर अपना कोड आधारित किया है कि चर अस्थिर था, यह आपके जेडीके को उतारने पर टूट गया होगा ... माना जाता है कि उदाहरण अलग है लेकिन आपको बिंदु मिल गया है। – assylias
कई मतभेद और समझौते के होते हैं:
एक अस्थिर क्षेत्र के रूप में एक
AtomicReference
प्राप्त/सेट एक ही झामुमो अर्थ विज्ञान का प्रयोग किया है (जावाडोक राज्यों के रूप में), लेकिनAtomicReference
एक के चारों ओर एक आवरण है संदर्भ, इसलिए फ़ील्ड में किसी भी पहुंच में एक और पॉइंटर पीछा शामिल है।स्मृति पदचिह्न (एक संपीड़ित उफ़ वातावरण है, जो सबसे के लिए सच है VMs कल्पना करते हुए) गुणा किया जाता है:
- अस्थिर रेफरी = 4 बी
AtomicReference
= 4 बी + 16b (12b वस्तु हैडर + 4 बी रेफ फील्ड)
AtomicReference
एक अस्थिर संदर्भ से एक समृद्ध एपीआई प्रदान करता है। आपAtomicFieldUpdater
, या जावा 9 के साथVarHandle
का उपयोग कर अस्थिर संदर्भ के लिए एपीआई प्राप्त कर सकते हैं। यदि आप कैंची के साथ चलना पसंद करते हैं तो आप सीधेsun.misc.Unsafe
तक पहुंच सकते हैं।AtomicReference
स्वयंUnsafe
का उपयोग कर लागू किया गया है।- केवल जरूरत/तैयार हो जाओ:
तो, जब यह अच्छा एक दूसरे के ऊपर का चयन करने के लिए है? एक अस्थिर क्षेत्र, सरल समाधान और सबसे ऊपरी ओवरहेड के साथ चिपकाएं।
AtomicReference
/AtomicFieldUpdater
/Unsafe
के बीच एक विकल्प बनाएं जहां आप अपने प्रदर्शन लाभ के लिए पठनीयता और जोखिम में भुगतान करते हैं। यदि यह संवेदनशील क्षेत्र नहीं है तो बस AtomicReference
पर जाएं। लाइब्रेरी लेखकों आमतौर पर लक्षित जेडीके, अपेक्षित एपीआई प्रतिबंध, स्मृति बाधाओं आदि के आधार पर इन तरीकों का मिश्रण उपयोग करते हैं।- 1. जावा बनाम सी संदर्भ
- 2. स्टेटिक वैरिएबल बनाम अस्थिर
- 3. जावा अस्थिर सरणी?
- 4. अस्थिर हैश मैप बनाम ConcurrentHashMap
- 5. संदर्भ प्रकार के लिए अस्थिर .net 4.0
- 6. पायथन idastar बनाम अस्थिर हल 8 पहेली
- 7. वेब संदर्भ बनाम सेवा संदर्भ
- 8. साझा संदर्भ अनुप्रयोग संदर्भ बनाम गतिविधि संदर्भ
- 9. बनाम व्यवहार में वस्तुओं
- 10. इटरेटर बनाम संदर्भ बनाम सूचक
- 11. जावा अस्थिर संशोधक और सिंक्रनाइज़ ब्लॉक
- 12. जावा थ्रेड-सुरक्षित में अस्थिर int है?
- 13. संदर्भ मेनू बनाम पॉपअप
- 14. स्मार्ट पॉइंटर्स बनाम संदर्भ
- 15. एमएसवीसी निर्भरता बनाम संदर्भ
- 16. संदर्भ डिस्ट्रायड() बनाम addShutdownHook()
- 17. धागा संदर्भ स्विच बनाम प्रक्रिया संदर्भ स्विच
- 18. संदर्भ-मुक्त व्याकरण बनाम संदर्भ-व्याकरण व्याकरण?
- 19. क्या परमाणु संदर्भ को अस्थिर घोषित करना आवश्यक है?
- 20. शून्य वास्तव में अस्थिर है?
- 21. संदर्भ प्रोसेसर बनाम मिडलवेयर बनाम django
- 22. रीस्टेसी मॉक बनाम अपवाद मैपर बनाम संदर्भ
- 23. जावा में मल्टीथ्रेडिंग में अस्थिर बनाम सिंक्रनाइज़ेशन का उपयोग कब करें?
- 24. अंतर्निहित रूपांतरण: स्थिरांक संदर्भ बनाम गैर-स्थिरांक संदर्भ बनाम गैर-संदर्भ
- 25. रेडिस मैक्समेमरी-पॉलिसी: अस्थिर-लू बनाम ऑलकी-लू
- 26. जीसीसी इनलाइन असेंबली के साथ अस्थिर बनाम कंपाइलर बाधा
- 27. अस्थिर अधिभार?
- 28. अस्थिर चर
- 29. अस्थिर क्षेत्र
- 30. अस्थिर sig_atomic_t
और लंबा उत्तर होगा? –
सहमत हुए। हमें कम से कम एक लिंक चाहिए। –
लंबे उत्तर का लिंक: http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/atomic/package-summary.html –