जावा मेमोरी मॉडल (JMM) परिभाषित करता है कि जावा में धागे स्मृति के माध्यम से बातचीत कैसे करते हैं। यह बताता है कि कैसे और जब एक धागे से बने परिवर्तन दूसरों के लिए दिखाई देते हैं। JMM को समझना सही समवर्ती जावा प्रोग्राम लिखने और डेटा दौड़ और दृश्यता समस्याओं जैसे सामान्य मुद्दों से बचने के लिए आवश्यक है।

जावा मेमोरी मॉडल की मूल बातें

JMM नियमों को निर्दिष्ट करता है कि कैसे धागे साझा चर को पढ़ते हैं और लिखते हैं। यह सुनिश्चित करता है कि संचालन परमाणु हैं और धागे के पार परिवर्तन की दृश्यता के बारे में गारंटी देता है। मॉडल में ऐसी अवधारणाएं पेश की जाती हैं जैसे कि होता है-पहले संबंध, जो समवर्ती निष्पादन में कार्रवाई के आदेश को निर्धारित करते हैं।

व्यावहारिक उदाहरण

एक साधारण उदाहरण पर विचार करें जहां एक धागा एक साझा परिवर्तनीय अद्यतन करता है और दूसरा धागा इसे पढ़ता है। उचित सिंक्रनाइज़ेशन के बिना, रीडिंग थ्रेड को कैशिंग या रीऑर्डरिंग के कारण कहानी डेटा देख सकता है। सिंक्रनाइज़ेशन ब्लॉक या अस्थिर चर का उपयोग करके JMM नियमों के अनुसार दृश्यता सुनिश्चित करता है।

आम मुद्दे और समाधान

  • डेटा रेस: Occur जब एकाधिक धागे सिंक्रनाइज़ेशन के बिना साझा डेटा को संशोधित करते हैं। इस को रोकने के लिए सिंक्रनाइज़ ब्लॉक या परमाणु वर्गों का उपयोग करें।
  • विज़िबिलिटी समस्या: एक धागे से बने परिवर्तन दूसरों के लिए दृश्य नहीं हैं। volatile]]] के रूप में साझा चर घोषित करें या स्पष्ट सिंक्रनाइज़ेशन का उपयोग करें।
  • Reordering: Compiler या CPU पुनर्गठन अप्रत्याशित व्यवहार का कारण बन सकता है। उचित सिंक्रनाइज़ेशन पुनः व्यवस्थित मुद्दों को रोकता है।