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

इस ट्यूटोरियल में, हम जावा ब्लॉकिंगक्यू इंटरफेस और इसके तरीकों के बारे में जानेंगे।

BlockingQueueजावा के इंटरफेस Collectionsढांचे का विस्तार Queueइंटरफेस। यह किसी भी ऑपरेशन को तब तक इंतजार करने की अनुमति देता है जब तक कि इसे सफलतापूर्वक निष्पादित नहीं किया जा सके।

उदाहरण के लिए, यदि हम किसी तत्व को खाली कतार से हटाना चाहते हैं, तो अवरुद्ध कतार हटाए जाने की प्रक्रिया को तब तक प्रतीक्षा करने की अनुमति देती है जब तक कि कतार में कुछ तत्व हटा दिए जाएं।

कक्षाएं जो ब्लॉकिंग क्यू को लागू करती हैं

चूंकि BlockingQueueएक इंटरफ़ेस है, हम इसका प्रत्यक्ष कार्यान्वयन प्रदान नहीं कर सकते।

की कार्यक्षमता का उपयोग करने के लिए BlockingQueue, हमें उन वर्गों का उपयोग करने की आवश्यकता है जो इसे लागू करते हैं।

  • ArrayBlockingQueue
  • लिंक्डब्लॉकिंग क्यू

अवरुद्ध कतारों का उपयोग कैसे करें?

java.util.concurrent.BlockingQueueउपयोग करने के लिए हमें पैकेज आयात करना चाहिए BlockingQueue

 // Array implementation of BlockingQueue BlockingQueue animal1 = new ArraryBlockingQueue(); // LinkedList implementation of BlockingQueue BlockingQueue animal2 = new LinkedBlockingQueue(); 

यहां, हमने क्रमशः कक्षाओं के जानवरों और जानवरों के 2 ArrayBlockingQueueऔर LinkedBlockingQueue, वस्तुओं का निर्माण किया है। ये ऑब्जेक्ट BlockingQueueइंटरफ़ेस की कार्यक्षमता का उपयोग कर सकते हैं ।

ब्लॉकिंग क्यू के तरीके

एक कतार पूर्ण या रिक्त है, इसके आधार पर, एक अवरुद्ध कतार के तरीकों को 3 श्रेणियों में विभाजित किया जा सकता है:

एक अपवाद फेंकने वाले तरीके

  • add()- कतार के अंत में अवरुद्ध कतार में एक तत्व सम्मिलित करता है। यदि कतार भरी हो तो एक अपवाद फेंकता है।
  • element()- अवरुद्ध कतार का सिर लौटाता है। यदि कतार खाली है तो एक अपवाद फेंकता है।
  • remove()- अवरुद्ध कतार से एक तत्व निकालता है। यदि कतार खाली है तो एक अपवाद फेंकता है।

कुछ मूल्य वापस करने वाले तरीके

  • offer()- निर्दिष्ट तत्व को कतार के अंत में अवरुद्ध कतार में सम्मिलित करता है। falseयदि कतार भरी हो तो वापस लौटता है।
  • peek()- अवरुद्ध कतार का सिर लौटाता है। nullअगर कतार खाली है तो लौटाता है।
  • poll()- अवरुद्ध कतार से एक तत्व निकालता है। nullअगर कतार खाली है तो लौटाता है।

प्रस्ताव पर अधिक () और पोल ()

offer()और poll()विधि समय समाप्ति के साथ प्रयोग किया जा सकता है। यही है, हम समय इकाइयों को एक पैरामीटर के रूप में पारित कर सकते हैं। उदाहरण के लिए,

 offer(value, 100, milliseconds) 

यहाँ,

  • मूल्य कतार में डाला जाने वाला तत्व है
  • और हमने 100 मिलीसेकंड का समय निर्धारित किया है

इसका मतलब यह है कि offer()विधि 100मिलीसेकंड के लिए अवरुद्ध कतार में एक तत्व डालने की कोशिश करेगी । यदि तत्व 100 मिलीसेकंड में सम्मिलित नहीं किया जा सकता है, तो विधि वापस आ जाती है false

नोट: इसके बजाय milliseconds, हम भी इन समय की इकाइयों का उपयोग कर सकते हैं: days, hours, minutes, seconds, microsecondsऔर nanosecondsमें offer()और poll()तरीकों।

ऐसे तरीके जो ऑपरेशन को रोकते हैं

BlockingQueueभी संचालन ब्लॉक और अगर कतार पूर्ण या खाली है प्रतीक्षा करने के तरीकों प्रदान करता है।

  • put()- अवरुद्ध कतार में एक तत्व सम्मिलित करता है। यदि कतार भरी है, तो यह तब तक इंतजार करेगा जब तक कतार में किसी तत्व को सम्मिलित करने के लिए जगह न हो।
  • take()- एक तत्व को अवरुद्ध कतार से हटाता है और लौटाता है। यदि कतार खाली है, तो यह तब तक प्रतीक्षा करेगा जब तक कि कतार में तत्वों को हटा दिया जाए।

मान लीजिए, हम तत्वों को एक कतार में सम्मिलित करना चाहते हैं। यदि कतार भरी हुई है, तो put()विधि तब तक प्रतीक्षा करेगी जब तक कतार में तत्वों को सम्मिलित करने के लिए जगह न हो।

इसी तरह, यदि हम एक कतार से तत्वों को हटाना चाहते हैं। यदि कतार खाली है, तो take()विधि तब तक प्रतीक्षा करेगी जब तक कि कतार में तत्व हटाए नहीं जाएंगे।

ArrayBlockingQueue में ब्लॉकिंग क्यू का कार्यान्वयन

 import java.util.concurrent.BlockingQueue; import java.util.concurrent.ArrayBlockingQueue; class Main ( public static void main(String() args) ( // Create a blocking queue using the ArrayBlockingQueue BlockingQueue numbers = new ArrayBlockingQueue(5); try ( // Insert element to blocking queue numbers.put(2); numbers.put(1); numbers.put(3); System.out.println("BLockingQueue: " + numbers); // Remove Elements from blocking queue int removedNumber = numbers.take(); System.out.println("Removed Number: " + removedNumber); ) catch(Exception e) ( e.getStackTrace(); ) ) ) 

आउटपुट

 ब्लॉकिंग क्यू: (2, 1, 3) निकाले गए तत्व: 2 

के बारे में अधिक जानने के लिए ArrayBlockingQueue, Java ArrayBlockingQueue पर जाएँ।

क्यों अवरुद्ध कर रहा है?

जावा में, थ्रेड-सुरक्षित संग्रह के BlockingQueueरूप में माना जाता है । ऐसा इसलिए है क्योंकि यह मल्टी-थ्रेडिंग ऑपरेशन में मददगार हो सकता है।

मान लीजिए कि एक धागा कतार में तत्वों को सम्मिलित कर रहा है और दूसरा धागा कतार से तत्वों को निकाल रहा है।

अब, यदि पहला धागा धीमा चलता है, तो अवरुद्ध कतार दूसरे धागे को तब तक प्रतीक्षा कर सकती है जब तक कि पहला धागा अपना ऑपरेशन पूरा नहीं कर लेता।

दिलचस्प लेख...