CodeGym/Java Course/मॉड्यूल 3/जावा कंकरेंसी लाइब्रेरी

जावा कंकरेंसी लाइब्रेरी

उपलब्ध

जावा में मल्टीथ्रेडिंग

जावा वर्चुअल मशीन समानांतर कंप्यूटिंग का समर्थन करती है । सभी गणनाएँ एक या अधिक थ्रेड्स के संदर्भ में की जा सकती हैं। हम कई थ्रेड्स के लिए एक ही संसाधन या ऑब्जेक्ट तक आसानी से पहुंच स्थापित कर सकते हैं, साथ ही कोड के एक ब्लॉक को निष्पादित करने के लिए एक थ्रेड सेट कर सकते हैं।

किसी भी डेवलपर को उन संसाधनों के लिए रीड और राइट ऑपरेशंस के दौरान थ्रेड्स के साथ काम को सिंक्रोनाइज़ करने की आवश्यकता होती है, जिनके पास कई थ्रेड्स आवंटित होते हैं।

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

थ्रेड ऑब्जेक्ट्स

यह सब मुख्य (मुख्य) थ्रेड से शुरू होता है, यानी कम से कम आपके प्रोग्राम में पहले से ही एक रनिंग थ्रेड है। मुख्य थ्रेड Callable या Runnable का उपयोग करके अन्य थ्रेड्स बना सकता है । निर्माण केवल रिटर्न परिणाम में भिन्न होता है, रननेबल परिणाम वापस नहीं करता है और चेक किए गए अपवाद को नहीं फेंक सकता है। इसलिए, आपको फ़ाइलों के साथ कुशल कार्य करने का एक अच्छा अवसर मिलता है, लेकिन यह बहुत खतरनाक है और आपको सावधान रहने की आवश्यकता है।

थ्रेड निष्पादन को एक अलग CPU कोर पर शेड्यूल करना भी संभव है। सिस्टम थ्रेड्स के बीच आसानी से स्थानांतरित हो सकता है और सही सेटिंग्स के साथ एक विशिष्ट थ्रेड को निष्पादित कर सकता है: अर्थात, डेटा को पढ़ने वाले थ्रेड को पहले निष्पादित किया जाता है, जैसे ही हमारे पास डेटा होता है, फिर हम इसे उस थ्रेड में पास करते हैं जो सत्यापन के लिए जिम्मेदार है, उसके बाद हम इसे कुछ व्यापार तर्क निष्पादित करने के लिए धागे में पास करते हैं और एक नया धागा उन्हें वापस लिखता है। ऐसे में 4 थ्रेड्स बारी-बारी से डेटा प्रोसेस कर रहे हैं और सब कुछ एक थ्रेड से ज्यादा तेजी से काम करेगा। इस तरह की प्रत्येक स्ट्रीम को मूल OS स्ट्रीम में बदल दिया जाता है, लेकिन इसे कैसे परिवर्तित किया जाएगा यह JVM कार्यान्वयन पर निर्भर करता है।

थ्रेड क्लास का उपयोग थ्रेड्स बनाने और उनके साथ काम करने के लिए किया जाता है। इसमें मानक नियंत्रण तंत्र के साथ-साथ अमूर्त भी हैं, जैसे कि java.util.concurrent से वर्ग और संग्रह ।

जावा में थ्रेड तुल्यकालन

वस्तुओं तक पहुंच साझा करके संचार प्रदान किया जाता है। यह बहुत प्रभावी है, लेकिन साथ ही काम करते समय गलती करना बहुत आसान है। त्रुटियां दो मामलों में आती हैं: थ्रेड इंटरफेरेंस - जब कोई अन्य थ्रेड आपके थ्रेड में हस्तक्षेप करता है, और मेमोरी कंसिस्टेंसी एरर - मेमोरी कंसिस्टेंसी। इन त्रुटियों को हल करने और रोकने के लिए, हमारे पास विभिन्न तुल्यकालन विधियाँ हैं।

जावा में थ्रेड सिंक्रोनाइज़ेशन मॉनिटर द्वारा नियंत्रित किया जाता है, यह एक उच्च-स्तरीय तंत्र है जो एक समय में एक ही मॉनिटर द्वारा संरक्षित कोड के ब्लॉक को निष्पादित करने के लिए केवल एक थ्रेड को अनुमति देता है। लॉक के संदर्भ में मॉनिटर के व्यवहार पर विचार किया जाता है; एक मॉनिटर - एक ताला।

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

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

जब कोई नया थ्रेड मॉनिटर को कैप्चर करता है, तो हम कोड के उस ब्लॉक को निष्पादित करने की क्षमता और एक्सेस प्राप्त करते हैं, और उस समय वेरिएबल मुख्य मेमोरी से लोड किए जाएंगे। तब हम मॉनिटर की पिछली रिलीज द्वारा दिखाई गई सभी प्रविष्टियां देख सकते हैं।

किसी फ़ील्ड पर पढ़ना-लिखना एक परमाणु ऑपरेशन है यदि फ़ील्ड को या तो अस्थिर घोषित किया जाता है या किसी पढ़ने-लिखने से पहले प्राप्त किए गए अद्वितीय लॉक द्वारा संरक्षित किया जाता है। लेकिन अगर आप अभी भी एक त्रुटि का सामना करते हैं, तो आपको पुनः क्रमित करने (आदेश बदलने, पुनर्क्रमित करने) के बारे में एक त्रुटि मिलती है। यह खुद को गलत तरीके से सिंक्रनाइज़ किए गए बहु-थ्रेडेड प्रोग्राम में प्रकट करता है, जहां एक थ्रेड अन्य थ्रेड्स द्वारा उत्पन्न होने वाले प्रभावों का निरीक्षण कर सकता है।

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

जावा में अस्थिर क्षेत्र

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

राइट मॉनिटर रिलीज़ की तरह काम करता है, और रीड मॉनिटर कैप्चर की तरह काम करता है। पहुँच "पहले निष्पादित" प्रकार के संबंध में की जाती है। यदि आप इसका पता लगाते हैं, तो वह सब जो थ्रेड A को दिखाई देगा, जब वह अस्थिर चर का उपयोग करता है, तो थ्रेड B के लिए चर होता है। यानी, आपको गारंटी दी जाती है कि आप अन्य थ्रेड्स से अपने परिवर्तनों को न खोएं।

वाष्पशील चर परमाणु होते हैं, अर्थात, इस तरह के चर को पढ़ते समय, उसी प्रभाव का उपयोग किया जाता है जब लॉक प्राप्त करते समय - मेमोरी में डेटा को अमान्य या गलत घोषित किया जाता है, और वाष्पशील चर का मान फिर से मेमोरी से पढ़ा जाता है । लिखते समय, मेमोरी पर प्रभाव का उपयोग किया जाता है, साथ ही लॉक को रिलीज़ करते समय - एक अस्थिर क्षेत्र को मेमोरी में लिखा जाता है।

जावा समवर्ती

यदि आप एक अति-कुशल और बहु-थ्रेडेड एप्लिकेशन बनाना चाहते हैं, तो आपको JavaConcurrent लाइब्रेरी से कक्षाओं का उपयोग करना होगा , जो कि java.util.concurrent पैकेज में हैं ।

पुस्तकालय बहुत विशाल है और इसकी अलग-अलग कार्यक्षमता है, तो आइए देखें कि अंदर क्या है और इसे कुछ मॉड्यूल में विभाजित करें:

जावा समवर्ती

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

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

सिंक्रोनाइजर्स थ्रेड्स को सिंक्रोनाइज़ करने के लिए यूटिलिटी यूटिलिटीज हैं। वे "समानांतर" कंप्यूटिंग में एक शक्तिशाली हथियार हैं।

निष्पादक थ्रेड पूल के अधिक सुविधाजनक और आसान निर्माण के लिए एक रूपरेखा है, परिणाम प्राप्त करने के साथ अतुल्यकालिक कार्यों का शेड्यूल करना आसान है।

ताले कई लचीले थ्रेड सिंक्रोनाइज़ेशन मैकेनिज़्म हैं, जिनकी तुलना बेसिक सिंक्रोनाइज़्ड , वेट , नोटिफ़िकेशन , नोटिफ़िकेशन ऑल से की जाती है ।

परमाणु वे वर्ग हैं जो आदिम और संदर्भों पर परमाणु संचालन का समर्थन कर सकते हैं।

टिप्पणियां
  • लोकप्रिय
  • नया
  • पुराना
टिप्पणी लिखने के लिए आपको साइन इन करना होगा
इस पेज पर अभी तक कोई टिप्पणियां नहीं हैं