क्षणिक और वाष्पशील संशोधक क्या हैं?


126

कोई व्याख्या कर सकते हैं क्या transientऔर volatileसंशोधक जावा में क्या मतलब है?


3
यह स्पष्ट रूप से एक सवाल नहीं था और यह वैसे भी एक डुप्लिकेट है (यही कारण है कि मैंने बंद करने के लिए मतदान किया)। उदाहरण के लिए देखें जावा में क्षणिक चर क्यों है? और जब आप जावा में वाष्पशील कीवर्ड का उपयोग करते हैं? (और कई अन्य)।
पास्कल थिवेंट


18
यह पूरी तरह से मान्य प्रश्न है, इसके बराबर: stackoverflow.com/questions/215497/…
बैरी फ्रूटमैन

जवाबों:


156

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 - लेकिन स्थानीय चर या मापदंडों के लिए नहीं।


10

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


2
कीवर्ड transientके साथ-साथ वैरिएबल का उपयोग नहीं किया जा सकता है कारण यह है staticकि स्थिर वैरिएबल एक वर्ग के हैं और किसी भी व्यक्तिगत उदाहरण के नहीं। क्रमांकन की अवधारणा वस्तु की वर्तमान स्थिति से संबंधित है। केवल एक वर्ग के विशिष्ट उदाहरण से जुड़े आंकड़ों को क्रमबद्ध किया जाता है, इसलिए स्थैतिक सदस्य क्षेत्रों को क्रमांकन के दौरान नजरअंदाज कर दिया जाता है
चाकलादेर असफाक आरव

वास्तव में, JLS परमिट staticऔर transientएक साथ उपयोग किया जाना है। समस्या यह है कि यह थोड़ा समझ में आता है, क्योंकि ठेठ क्रमांकन तंत्र वैसे भी स्टैटिक्स को बनाए नहीं रखते हैं।
स्टीफन सी

7

अस्थिर का मतलब है कि अन्य धागे उस विशेष चर को संपादित कर सकते हैं। इसलिए संकलक उनके लिए उपयोग की अनुमति देता है।

http://www.javamex.com/tutorials/synchronization_volatile.shtml

क्षणिक का अर्थ है कि जब आप किसी वस्तु को क्रमबद्ध करते हैं, तो वह डी-क्रमांकन पर अपना डिफ़ॉल्ट मान लौटाएगा

http://www.geekinterview.com/question_details/2


5
"तो संकलक उन तक पहुंच की अनुमति देता है।" आपका वाक्य बताता है कि थ्रेड्स डिफ़ॉल्ट रूप से एक्सेस नहीं करते हैं। अब मैं लिंक को पढ़ता हूं और दूसरा उत्तर जो मुझे समझ में आता है: संकलक चर के किसी भी प्रकार के विशिष्ट-विशिष्ट मध्यवर्ती भंडारण को नहीं करता है, ताकि अन्य धागे में परिवर्तन को देख सकें।
हेलिओस

मुझे अस्थिर का जावा उपयोग मिला और अस्थिर उलझन का जावा उपयोग। मेरा मतलब था कि संकलक यह सुनिश्चित करता है कि उसके पास क्षेत्र के एक्टॉउल मूल्य तक पहुंच है, बल्कि एक कैश्ड मूल्य है।
रायनोस

इसका मतलब इससे कहीं ज्यादा है।
स्टीफन सी

1

क्षणिक:

पहले यह जानने की जरूरत है कि यह कहां अंतराल की जरूरत है।

1) एक पहुँच संशोधक क्षणिक केवल चर घटक के लिए ही लागू है। यह विधि या वर्ग के साथ उपयोग नहीं किया जाएगा।

2) स्थैतिक कीवर्ड का उपयोग स्थिर कीवर्ड के साथ नहीं किया जा सकता है।

३) क्रमबद्धता क्या है और इसका उपयोग कहाँ किया जाता है? सीरियलाइजेशन ऑब्जेक्ट की स्थिति को लगातार बनाने की प्रक्रिया है। इसका मतलब है कि वस्तु की स्थिति को बनाए रखने के लिए बाइट्स की एक धारा में परिवर्तित किया जाता है (उदाहरण के लिए किसी फ़ाइल में बाइट्स को संग्रहीत करना) या स्थानांतरित करना (उदाहरण के लिए एक नेटवर्क में बाइट्स भेजना)। उसी तरह, हम वस्तु की स्थिति को बाइट्स से वापस लाने के लिए डीसेरिएलाइज़ेशन का उपयोग कर सकते हैं। यह जावा प्रोग्रामिंग में महत्वपूर्ण अवधारणाओं में से एक है क्योंकि क्रमांकन का उपयोग ज्यादातर नेटवर्किंग प्रोग्रामिंग में किया जाता है। जिन वस्तुओं को नेटवर्क के माध्यम से प्रेषित किया जाना है, उन्हें बाइट में बदलना होगा। क्षणिक कीवर्ड को समझने से पहले, किसी को क्रमांकन की अवधारणा को समझना होगा। यदि पाठक क्रमबद्धता के बारे में जानता है, तो कृपया पहले बिंदु को छोड़ दें।

नोट 1) क्षणिकता मुख्य रूप से सीरजेशन प्रक्रिया के लिए उपयोग की जाती है। उसके लिए वर्ग को java.io.Serializable इंटरफ़ेस लागू करना होगा। कक्षा के सभी क्षेत्र क्रमबद्ध होने चाहिए। यदि कोई क्षेत्र क्रमिक नहीं है, तो इसे क्षणिक चिह्नित किया जाना चाहिए।

नोट 2) जब deserialized प्रक्रिया हुई तो वे डिफ़ॉल्ट मान पर सेट हो जाते हैं - शून्य, गलत या प्रकार के अनुसार बाधा।

नोट 3) क्षणिक कीवर्ड और उसका उद्देश्य? एक क्षेत्र जो क्षणिक संशोधक के साथ घोषित किया जाता है वह क्रमबद्ध प्रक्रिया में भाग नहीं लेगा। जब किसी वस्तु को क्रमबद्ध (किसी भी अवस्था में सहेजा जाता है) किया जाता है, तो उसके क्षणिक क्षेत्रों के मूल्यों को सीरियल प्रतिनिधित्व में नजरअंदाज कर दिया जाता है, जबकि क्षणिक क्षेत्रों के अलावा अन्य क्षेत्र क्रमबद्धता प्रक्रिया में भाग लेंगे। यह क्षणिक कीवर्ड का मुख्य उद्देश्य है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.