पुस्तक जावा संगामिति से की सुरक्षित प्रकाशन के लिए अस्थिर guaranntee w.rt अंतिम:बनाम व्यवहार में वस्तुओं
एक वस्तु को सुरक्षित रूप से प्रकाशित करने के लिए, दोनों वस्तु को संदर्भ और वस्तु की राज्य बनाया जाना चाहिए एक ही समय में अन्य धागे के लिए दृश्यमान।
एक स्थिर प्रारंभकर्ता
एक अस्थिर क्षेत्र या AtomicReference
एक भंडारण में इसे करने के लिए एक संदर्भ के भंडारण से एक वस्तु संदर्भ शुरु कर रहा है: एक ठीक से निर्माण वस्तु सुरक्षित रूप से प्रकाशित किया जा सकता है उचित रूप से निर्मित ऑब्जेक्ट
सेंट के अंतिम क्षेत्र में इसका संदर्भ
लॉक द्वारा उचित रूप से संरक्षित क्षेत्र में इसका संदर्भ देना।
मेरे प्रश्न हैं:
- बुलेट बिंदुओं 2 और 3 के बीच क्या अंतर है? ऑब्जेक्ट के सुरक्षित प्रकाशन के संदर्भ में
volatile
दृष्टिकोण औरfinal
दृष्टिकोण के बीच अंतर में मुझे रूचि है। - बिंदु 3 में ठीक से निर्मित ऑब्जेक्ट के अंतिम फ़ील्ड का क्या मतलब है? बुलेट पॉइंट्स शुरू करने से पहले लेखकों ने पहले ही उल्लेख किया है कि वे एक उचित ढंग से निर्मित ऑब्जेक्ट के बारे में बात कर रहे हैं (जो मुझे लगता है कि
this
भागने के संदर्भ को नहीं दे रहा है)। लेकिन एक बार फिर उन्होंने सही ढंग से निर्मित वस्तुओं के बारे में क्यों उल्लेख किया?
हैं निर्माण के बाद मैं 'field.setX (new X())' जैसे फ़ील्ड द्वारा प्रस्तुत ऑब्जेक्ट की स्थिति को बदलता हूं, क्या यह परिवर्तन अन्य धागे द्वारा देखा जाने पर भी गारंटी देता है जब हम इसे अस्थिर घोषित करते हैं? या यह केवल प्रारंभिक सुरक्षा देता है? इस मामले में फाइनल के बारे में क्या? – Geek
नहीं, केवल 'फ़ील्ड' आपको दृश्यता (पुनः) असाइनमेंट पर दृश्यता गारंटी देता है। जब तक 'x' भी अस्थिर नहीं होता है,' field.x = नया X(); '(या आपका सेटर उदाहरण) ऐसी कोई गारंटी प्रदान नहीं करता है। – assylias
समान रूप से अंतिम के लिए चला जाता है, संक्षेप में कि यदि 'फ़ील्ड' के सभी सदस्य भी अंतिम हैं और अपरिवर्तनीय हैं, तो 'फ़ील्ड' अपरिवर्तनीय है और इसलिए थ्रेड सुरक्षित है। – assylias