Java में BlockingQueue क्या है और इसे कैसे लागू किया जाए?



Java में BlockingQueue का यह लेख आपको BlockingQueue इंटरफ़ेस के बारे में जानने में मदद करेगा। यह आपको इसके तरीकों और व्यावहारिक कार्यान्वयन में अंतर्दृष्टि भी देगा

अंतर्निहित सुविधाओं की व्यापक श्रेणी के कारण प्रोग्रामर्स के बीच बेहद लोकप्रिय है। आपके दिखने से पहले ही अधिकांश समय आपकी समस्या के लिए एक समर्पित समाधान होगा। इस तरह के एक अत्यंत उपयोगी और महत्वपूर्ण हिस्सा Java में BlockingQueue इंटरफ़ेस है। इस लेख के माध्यम से, मैं कुछ प्रकाश जावा में BlockingQueue और इसे लागू करने के तरीकों पर फेंक दूंगा।

नीचे इस लेख में शामिल विषय दिए गए हैं:





जावा में ब्लॉकिंग क्यू इंटरफ़ेस

जावा में ब्लॉकिंग क्यू एक इंटरफ़ेस है जो Java 1.5 में कुछ अन्य समवर्ती उपयोगिता वर्गों जैसे ConcurrentHashMap, CopyOnWriteArrrayList, आदि के साथ जोड़ा गया था। BlockingQueue इंटरफ़ेस का संबंध है java.util.concurrent पैकेजयह इंटरफ़ेस ब्लॉकिंग को सक्रिय करके प्रवाह नियंत्रण को बढ़ाता है, यदि कोई थ्रेड खाली कतार को हटाने या पूर्ण कतार को एन्क्यू करने की कोशिश कर रहा है। किसी भी स्थिति में, यह इंटरफ़ेस काम में आता है।सरल शब्दों में, मान लीजिए कि तत्वों को पहले से ही पूर्ण कतार में जोड़ने का प्रयास कर रहा है। इस बिंदु पर कार्यक्रम में, BlockingQueue लागू किया जाएगा जो उस विशेष धागे को अवरुद्ध करेगा जब तक कि एक और धागा अंतरिक्ष बनाने के लिए कतार जारी नहीं करता। यह पूरी कतार की निकासी के तत्व (एस) में से किसी एक को हटाने के परिणामस्वरूप हो सकता है। इसी प्रकार, BlockingQueue एक थ्रेड को पहले से खाली कतार को हटाने के लिए एक थ्रेड ब्लॉक करने के लिए आमंत्रित किया जाएगा जब तक कि कुछ अन्य थ्रेड आवेषण या खाली में एक तत्व नहीं जोड़ते हैं कतार

जावा में BlockingQueue इंटरफ़ेस के साथ काम करते समय, आपको यह याद रखना चाहिए कि यह एक शून्य मान को स्वीकार नहीं करता है। यदि आप ऐसा करने की कोशिश करते हैं, तो यह तुरंत NullPointerException को फेंक देगा। नीचे दिया गया आंकड़ा जावा में ब्लॉकिंग क्यू इंटरफेस के काम का प्रतिनिधित्व करता है।



BlockingQueue - जावा में ब्लॉकिंग क्यू - Edurekaयह इंटरफेस यह थ्रेड-सेफ के रूप में मुख्य रूप से निर्माता-उपभोक्ताओं के बीच उपयोग किया जाता है।मेरा मतलब है कि BlockingQueue इंटरफ़ेस का उपयोग एक कतार बनाने के लिए किया जा सकता है जिसे निर्माता और उपभोक्ता दोनों द्वारा साझा किया जा सकता है

बड़े डेटा विश्लेषिकी के आवेदन

जावा में ब्लॉकिंग क्यू के साथ काम करने के लिए, पहले, आपको इसके प्रकारों से परिचित होना होगा। इस लेख के अगले भाग में आपको उनसे मिलवाता हूँ।

जावा में ब्लॉकिंग क्यू के लिए कंस्ट्रक्टर्स के प्रकार

जावा में ब्लॉकिंग क्यू इंटरफेस के लिए दो प्रकार के निर्माणकर्ता हैं:



  • बिना कतार के: इस प्रकार की कतार के लिए, क्षमता को Integer.MAX_VALUE पर सेट किया जाएगा। एक अनबाउंड कतार कभी अवरुद्ध नहीं होगी क्योंकि यह गतिशील रूप से बढ़ सकती है, हर बार एक तत्व इसमें डाला जाता है। नीचे एक अनबाउंड कतार बनाने के लिए सिंटैक्स है:
ब्लॉकिंग क्यू ब्यूक = नया लिंक्डब्लॉकिंगडेक ()
  • बाध्य कतार: इस तरह की कतार के लिए, आपको इसके निर्माण के समय कतार की क्षमता को पास करने की आवश्यकता होती है, अर्थात बिल्डर पैरामीटर। एक बार आकार निर्धारित होने के बाद, इसे बदला नहीं जा सकता। नीचे एक बंधी हुई कतार बनाने का सिंटैक्स है:
ब्लॉकिंग क्यू बीक्यू = नया लिंक्डब्लॉकिंगडेक (10)

अब जब आप Java में BlockingQueue को लागू करने के तरीकों से परिचित हैं, तो मुझे इसके कुछ तरीकों की सूची दें।

ब्लॉकिंग क्यू इंटरफ़ेस में तरीके

तरीका विवरण
बूलियन ऐड (E e) यह विधि इस कतार में निर्दिष्ट तत्व को सम्मिलित करने में मदद करती है अगर कतार में जगह है तो यह होगाफेंक दोअवैध
बूलियन होता है (ऑब्जेक्ट ओ) यदि पंक्ति में निर्दिष्ट तत्व है, तो यह विधि सही होती है
int drainTo (संग्रह c) यह विधि कतार से सभी उपलब्ध तत्वों को हटा देगी और उन्हें निर्दिष्ट संग्रह में जोड़ देगी
int drainTo (संग्रह c, इंट अधिकतम) यह विधि कतार से उपलब्ध तत्वों की संख्या को हटा देगी और उन्हें निर्दिष्ट में जोड़ देगी
बूलियन पेशकश (ई ई) यह विधि निर्दिष्ट तत्व को कतार में सम्मिलित करेगी यदि यह पूर्ण नहीं है और सही है, तो यह गलत वापस आ जाएगी
बूलियन ऑफ़र (ई ई, लॉन्ग टाइमआउट, टाइम यूनिट यूनिट) यह विधि निर्दिष्ट तत्व को कतार में सम्मिलित करेगी। यदि कतार भर गई है, तो यह उपलब्ध होने के लिए स्थान के लिए निर्दिष्ट प्रतीक्षा समय तक प्रतीक्षा करेगा।
ई चुनाव (लंबे समय तक, टाइम यूनिट इकाई) यह विधि कतार के प्रमुख को पुनः प्राप्त करने और निकालने में मदद करती है। यदि कतार खाली है, तो यह तत्व उपलब्ध होने के लिए निर्दिष्ट प्रतीक्षा समय तक प्रतीक्षा करेगा
शून्य डाल (ई ई) यह विधि कतार में पूर्ण n केस उपलब्ध होने के लिए स्थान की प्रतीक्षा करके निर्दिष्ट तत्व को कतार में सम्मिलित करेगी
अंतर शेषता () यह विधि उन अतिरिक्त तत्वों की संख्या को वापस करने में मदद करती है जिन्हें यह कतार बिना अवरुद्ध किए आदर्श रूप से स्वीकार कर सकती है
बूलियन निकालें (ऑब्जेक्ट ओ) यह विधि पंक्ति से निर्दिष्ट तत्व का एक भी उदाहरण केवल मौजूद होने पर निकाल देगी
ई ले () यह विधि किसी तत्व के उपलब्ध होने की प्रतीक्षा करके कतार के प्रमुख को पुनः प्राप्त करने और निकालने में मदद करेगी, यदि कतार खाली है।

अवरोधक कार्यान्वयन

यहाँ मैं जावा में BlockingQueue का एक सरल उदाहरण लागू करूँगाक्लास एडुआप्रोड्यूसर डेटा जेनरेट करेगा और इसे एक में डालेगा कतार एक साथ, एक अन्य वर्ग, एडुकॉन्समर डेटा को एक ही कतार से हटा देगा।

इसके लिए मैं 3 वर्गों का निर्माण करूंगा:

  1. EduProducer
  2. EduConsumer
  3. EdurekaMain

आइए अब इन वर्गों में से प्रत्येक को एक-एक करके बनाएं।

हैशमैप और हैशटेबल में क्या अंतर है

EduProducer.java

पैकेज edureka import java.util.concurrent.BlockingQueue सार्वजनिक वर्ग EduProducer लागू करता है Runnable {निजी अंतिम BlockingQueue कतार @Override सार्वजनिक शून्य रन () {प्रयास करें (प्रक्रिया) {} (InterruptedException e) {Thread.currentThread () बाधा व्यवधान (}) } निजी शून्य प्रक्रिया () इंटरप्टेड एक्ससेप्शन को फेंकता है {// 10 ints को क्यू में डालें (int i = 0 i)<10 i++) { System.out.println('[Producer] Add : ' + i) queue.put(i) System.out.println('[Producer] Queue's Remaining Capacity : ' + queue.remainingCapacity()) Thread.sleep(150) } } public EduProducer(BlockingQueue queue) { this.queue = queue } }

EduConsumer.java

पैकेज edureka import java.util.concurrent.BlockingQueue सार्वजनिक वर्ग EduConsumer लागू करता है Runnable {निजी अंतिम अवरोधन क्यू कतार @Override सार्वजनिक शून्य रन () {{{(सत्य) {Integer take = queue.take () प्रक्रिया (ले)}} (InterruptedException e) {Thread.currentThread ()। व्यवधान ()}} निजी शून्य प्रक्रिया (पूर्णांक ले) फेंकता InterruptedException {System.out.println ('[उपभोक्ता] निकालें:' + 'Thread.sleep (500)} सार्वजनिक EduConsumer (ब्लॉकिंग क्यू कतार) {this.queue = queue}}

EdurekaMain.java

पैकेज edureka import java.util.concurrent.BlockingQueue import java.util.concurrent.LinkedBlockingQueue सार्वजनिक वर्ग EdurekaMain {सार्वजनिक स्थैतिक शून्य मुख्य (स्ट्रिंग) [args) {BlockingQueue queue = new LinkedBlockingQueue (10) नया (नया) .start () नया थ्रेड (नया EduConsumer (कतार))। start ()}

एक बार कोड लिखने के बाद, नीचे दिए गए आउटपुट को प्राप्त करने के लिए प्रोग्राम निष्पादित करें:

[निर्माता] जोड़ें: 0 [उपभोक्ता] लो: ० [निर्माता] कतार की शेष क्षमता: ९ [निर्माता] जोड़ें: १ [निर्माता] कतार की शेष क्षमता: ९ [निर्माता] जोड़ें: २ [निर्माता: कतार के शेष क्षमता: [] ] जोड़ें: 3 [निर्माता] कतार की शेष क्षमता: 7 [उपभोक्ता] ले: 1 [निर्माता] जोड़ें: 4 [निर्माता] कतार की शेष क्षमता: 7 [निर्माता] जोड़ें: 5 [निर्माता] कतार के शेष क्षमता: 6 [निर्माता] जोड़ें : 6 [निर्माता] कतार की शेष क्षमता: 5 [उपभोक्ता] ले: 2 [निर्माता] जोड़ें: 7 [निर्माता] कतार की शेष क्षमता: 5 [निर्माता] जोड़ें: 8 [निर्माता] कतार की शेष क्षमता: 4 [निर्माता] जोड़ें: 9 [निर्माता] क्यू की शेष क्षमता: ३ [उपभोक्ता] ले: ३ [उपभोक्ता] ले: ४ [उपभोक्ता] ले: ५ [उपभोक्ता] ले: ६ [उपभोक्ता] ले: Consumer [उपभोक्ता] लो: Consumer [उपभोक्ता] लो: ९

यह जावा में ब्लॉकिंग क्यू पर इस लेख के अंत में हमें लाता है। यदि आप अधिक विस्तार से जावा सीखना चाहते हैं, तो आप हमारे बारे में बता सकते हैं भी।

अब जब आप Java में BlockingQueue की मूल बातें समझ गए हैं, तो देखें 250,000 से अधिक संतुष्ट शिक्षार्थियों के एक नेटवर्क के साथ एक विश्वसनीय ऑनलाइन शिक्षण कंपनी, एडुरेका द्वारा, दुनिया भर में फैली हुई है। एडुर्का का जावा J2EE और SOA प्रशिक्षण और प्रमाणन पाठ्यक्रम उन छात्रों और पेशेवरों के लिए डिज़ाइन किया गया है जो जावा डेवलपर बनना चाहते हैं। पाठ्यक्रम आपको जावा प्रोग्रामिंग में एक प्रमुख शुरुआत देने के लिए डिज़ाइन किया गया है और आपको हाइबरनेट और स्प्रिंग जैसे विभिन्न जावा फ्रेमवर्क के साथ कोर और उन्नत जावा अवधारणाओं दोनों के लिए प्रशिक्षित करता है।

क्या आप हमसे कोई प्रश्न पूछना चाहते हैं? कृपया इसे 'जावा में ब्लॉकिंग क्यू' के टिप्पणी अनुभाग में उल्लेख करें और हम जल्द से जल्द आपको वापस कर देंगे।