कोई व्याख्या कर सकते हैं क्या transient
और volatile
संशोधक जावा में क्या मतलब है?
कोई व्याख्या कर सकते हैं क्या transient
और volatile
संशोधक जावा में क्या मतलब है?
जवाबों:
volatile
और transient
संशोधक वर्गों के क्षेत्रों के लिए लागू किया जा सकता 1 फ़ील्ड प्रकार की परवाह किए बिना। इसके अलावा, वे असंबंधित हैं।
transient
आपरिवर्तक जावा वस्तु क्रमबद्धता सबसिस्टम बताता है कि जब वर्ग का एक उदाहरण serializing क्षेत्र को छोड़ने के लिए। जब ऑब्जेक्ट तब deserialized होता है, तो फ़ील्ड को डिफ़ॉल्ट मान से आरंभ किया जाएगा; यानी null
एक संदर्भ प्रकार, और शून्य के लिए या false
एक आदिम प्रकार के लिए। ध्यान दें कि जेएलएस ( 8.3.1.3 देखें ) का transient
मतलब क्या है, यह नहीं बताता है, लेकिन जावा ऑब्जेक्ट सीरियलाइजेशन स्पेसिफिकेशन के लिए डिफरेक्ट करता है । अन्य क्रमांकन तंत्र किसी क्षेत्र की ख़ासियत पर ध्यान दे सकते हैंtransient
। या वे इसे अनदेखा कर सकते हैं।
(ध्यान दें कि जेएलएस एक static
क्षेत्र को घोषित करने की अनुमति देता है transient
। यह संयोजन जावा ऑब्जेक्ट सीरियलाइज़ेशन के लिए कोई मतलब नहीं है, क्योंकि यह वैसे भी स्टैटिक्स को क्रमबद्ध नहीं करता है। हालांकि, यह अन्य संदर्भों में समझ में आ सकता है, इसलिए इसके लिए कुछ औचित्य है। यह स्पष्ट रूप से मना नहीं है।)
volatile
संशोधक JVM बताता है कि क्षेत्र के लिए लेखन हमेशा तुल्यकालिक स्मृति को प्लावित किया जाना चाहिए, और कहा कि हमेशा स्मृति से पढ़ना चाहिए क्षेत्र की पढ़ता है। इसका अर्थ है कि वाष्पशील के रूप में चिह्नित फ़ील्ड को मूल या मानक पुस्तकालय-आधारित सिंक्रनाइज़ेशन का उपयोग किए बिना बहु-थ्रेड एप्लिकेशन में सुरक्षित रूप से एक्सेस और अपडेट किया जा सकता है। इसी तरह, वाष्पशील क्षेत्रों को पढ़ता और लिखता है परमाणु। (यह गैर-वाष्पशील << long
या double
फ़ील्ड पर लागू नहीं होता है , जो कुछ वीवीएम पर "वर्ड फाड़" के अधीन हो सकता है।) JLS के प्रासंगिक भाग 8.3.1.4 , 17.4 और 17.7 हैं ।
1 - लेकिन स्थानीय चर या मापदंडों के लिए नहीं।
volatile
और transient
कीवर्ड
1) transient
कीवर्ड का उपयोग सीरियल वेरिएशन से बाहर करने के लिए उदाहरण चर के साथ किया जाता है। यदि कोई फ़ील्ड है, तो transient
उसका मान कायम नहीं रहेगा।
दूसरी ओर, volatile
कीवर्ड का उपयोग जावा चर को "मुख्य मेमोरी में संग्रहीत होने" के रूप में चिह्नित करने के लिए किया जाता है।
एक volatile
चर का हर पाठ कंप्यूटर की मुख्य मेमोरी से पढ़ा जाएगा, और सीपीयू कैश से नहीं, और यह कि volatile
चर के लिए प्रत्येक लेखन मुख्य मेमोरी में लिखा जाएगा, न कि केवल सीपीयू कैश से।
2) transient
कीवर्ड का उपयोग static
कीवर्ड के साथ नहीं किया volatile
जा सकता है, लेकिन साथ में इस्तेमाल किया जा सकता है static
।
3) transient
चर को क्रम-निर्धारण के दौरान डिफ़ॉल्ट मान के साथ आरम्भ किया जाता है और अनुप्रयोग कोड द्वारा मूल्य के असाइनमेंट या पुनर्स्थापना को संभालना पड़ता है।
अधिक जानकारी के लिए, मेरा ब्लॉग देखें:
http://javaexplorer03.blogspot.in/2015/07/difference-between-volatile-and.html
transient
के साथ-साथ वैरिएबल का उपयोग नहीं किया जा सकता है कारण यह है static
कि स्थिर वैरिएबल एक वर्ग के हैं और किसी भी व्यक्तिगत उदाहरण के नहीं। क्रमांकन की अवधारणा वस्तु की वर्तमान स्थिति से संबंधित है। केवल एक वर्ग के विशिष्ट उदाहरण से जुड़े आंकड़ों को क्रमबद्ध किया जाता है, इसलिए स्थैतिक सदस्य क्षेत्रों को क्रमांकन के दौरान नजरअंदाज कर दिया जाता है
static
और transient
एक साथ उपयोग किया जाना है। समस्या यह है कि यह थोड़ा समझ में आता है, क्योंकि ठेठ क्रमांकन तंत्र वैसे भी स्टैटिक्स को बनाए नहीं रखते हैं।
अस्थिर का मतलब है कि अन्य धागे उस विशेष चर को संपादित कर सकते हैं। इसलिए संकलक उनके लिए उपयोग की अनुमति देता है।
http://www.javamex.com/tutorials/synchronization_volatile.shtml
क्षणिक का अर्थ है कि जब आप किसी वस्तु को क्रमबद्ध करते हैं, तो वह डी-क्रमांकन पर अपना डिफ़ॉल्ट मान लौटाएगा
क्षणिक:
पहले यह जानने की जरूरत है कि यह कहां अंतराल की जरूरत है।
1) एक पहुँच संशोधक क्षणिक केवल चर घटक के लिए ही लागू है। यह विधि या वर्ग के साथ उपयोग नहीं किया जाएगा।
2) स्थैतिक कीवर्ड का उपयोग स्थिर कीवर्ड के साथ नहीं किया जा सकता है।
३) क्रमबद्धता क्या है और इसका उपयोग कहाँ किया जाता है? सीरियलाइजेशन ऑब्जेक्ट की स्थिति को लगातार बनाने की प्रक्रिया है। इसका मतलब है कि वस्तु की स्थिति को बनाए रखने के लिए बाइट्स की एक धारा में परिवर्तित किया जाता है (उदाहरण के लिए किसी फ़ाइल में बाइट्स को संग्रहीत करना) या स्थानांतरित करना (उदाहरण के लिए एक नेटवर्क में बाइट्स भेजना)। उसी तरह, हम वस्तु की स्थिति को बाइट्स से वापस लाने के लिए डीसेरिएलाइज़ेशन का उपयोग कर सकते हैं। यह जावा प्रोग्रामिंग में महत्वपूर्ण अवधारणाओं में से एक है क्योंकि क्रमांकन का उपयोग ज्यादातर नेटवर्किंग प्रोग्रामिंग में किया जाता है। जिन वस्तुओं को नेटवर्क के माध्यम से प्रेषित किया जाना है, उन्हें बाइट में बदलना होगा। क्षणिक कीवर्ड को समझने से पहले, किसी को क्रमांकन की अवधारणा को समझना होगा। यदि पाठक क्रमबद्धता के बारे में जानता है, तो कृपया पहले बिंदु को छोड़ दें।
नोट 1) क्षणिकता मुख्य रूप से सीरजेशन प्रक्रिया के लिए उपयोग की जाती है। उसके लिए वर्ग को java.io.Serializable इंटरफ़ेस लागू करना होगा। कक्षा के सभी क्षेत्र क्रमबद्ध होने चाहिए। यदि कोई क्षेत्र क्रमिक नहीं है, तो इसे क्षणिक चिह्नित किया जाना चाहिए।
नोट 2) जब deserialized प्रक्रिया हुई तो वे डिफ़ॉल्ट मान पर सेट हो जाते हैं - शून्य, गलत या प्रकार के अनुसार बाधा।
नोट 3) क्षणिक कीवर्ड और उसका उद्देश्य? एक क्षेत्र जो क्षणिक संशोधक के साथ घोषित किया जाता है वह क्रमबद्ध प्रक्रिया में भाग नहीं लेगा। जब किसी वस्तु को क्रमबद्ध (किसी भी अवस्था में सहेजा जाता है) किया जाता है, तो उसके क्षणिक क्षेत्रों के मूल्यों को सीरियल प्रतिनिधित्व में नजरअंदाज कर दिया जाता है, जबकि क्षणिक क्षेत्रों के अलावा अन्य क्षेत्र क्रमबद्धता प्रक्रिया में भाग लेंगे। यह क्षणिक कीवर्ड का मुख्य उद्देश्य है।