Java ArrayBlockingQueue

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

ArrayBlockingQueueजावा कलेक्शंस फ्रेमवर्क का वर्ग एक सरणी का उपयोग करके अवरुद्ध कतार कार्यान्वयन प्रदान करता है।

यह जावा ब्लॉकिंगक्यू इंटरफेस को लागू करता है।

ArrayBlockingQueue बनाना

एक सरणी अवरोधन कतार बनाने के लिए, हमें java.util.concurrent.ArrayBlockingQueueपैकेज को आयात करना होगा ।

एक बार जब हम पैकेज आयात कर लेते हैं, तो यहाँ हम जावा में एक ब्लॉकिंग कतार बना सकते हैं:

 ArrayBlockingQueue animal = new ArrayBlockingQueue(int capacity); 

यहाँ,

  • प्रकार - सरणी अवरुद्ध कतार का प्रकार
  • क्षमता - सरणी अवरुद्ध कतार का आकार

उदाहरण के लिए,

 // Creating String type ArrayBlockingQueue with size 5 ArrayBlockingQueue animals = new ArrayBlockingQueue(5); // Creating Integer type ArrayBlockingQueue with size 5 ArrayBlockingQueue age = new ArrayBlockingQueue(5); 

नोट: सरणी का आकार प्रदान करना अनिवार्य है।

ArrayBlockingQueue के तरीके

ArrayBlockingQueueकक्षा में सभी तरीकों के कार्यान्वयन प्रदान करता है BlockingQueueइंटरफ़ेस।

इन विधियों का उपयोग सरणी अवरोधन कतारों से तत्वों को सम्मिलित करने, उपयोग करने और हटाने के लिए किया जाता है।

इसके अलावा, हम दो तरीकों के बारे में जानेंगे put()और take()यह सरणी अवरुद्ध कतार में अवरोधक संचालन का समर्थन करेंगे।

ये दो विधियां अन्य विशिष्ट कतारों से सरणी अवरुद्ध कतार को अलग करती हैं।

तत्वों को सम्मिलित करें

  • add()- निर्दिष्ट तत्व को सरणी अवरोधन कतार में सम्मिलित करता है। यह एक अपवाद फेंकता है यदि कतार भरी हुई है।
  • offer()- निर्दिष्ट तत्व को सरणी अवरोधन कतार में सम्मिलित करता है। falseयदि कतार भर जाती है तो यह वापस आ जाती है।

उदाहरण के लिए,

 import java.util.concurrent.ArrayBlockingQueue; class Main ( public static void main(String() args) ( ArrayBlockingQueue animals = new ArrayBlockingQueue(5); // Using add() animals.add("Dog"); animals.add("Cat"); // Using offer() animals.offer("Horse"); System.out.println("ArrayBlockingQueue: " + animals); ) ) 

आउटपुट

 ArrayBlockingQueue: (कुत्ता, बिल्ली, घोड़ा) 

तत्वों तक पहुँच

  • peek()- सरणी अवरुद्ध कतार के सामने से एक तत्व लौटाता है। nullयदि कतार खाली है तो यह वापस आ जाती है।
  • iterator()- क्रम अवरोधक कतार से तत्वों को क्रमिक रूप से एक्सेस करने के लिए एक पुनरावृत्ति वस्तु देता है। यह एक अपवाद फेंकता है अगर कतार खाली है। हमें java.util.Iteratorइसका उपयोग करने के लिए पैकेज आयात करना चाहिए ।

उदाहरण के लिए,

 import java.util.concurrent.ArrayBlockingQueue; import java.util.Iterator; class Main ( public static void main(String() args) ( ArrayBlockingQueue animals = new ArrayBlockingQueue(5); // Add elements animals.add("Dog"); animals.add("Cat"); animals.add("Horse"); System.out.println("ArrayBlockingQueue: " + animals); // Using peek() String element = animals.peek(); System.out.println("Accessed Element: " + element); // Using iterator() Iterator iterate = animals.iterator(); System.out.print("ArrayBlockingQueue Elements: "); while(iterate.hasNext()) ( System.out.print(iterate.next()); System.out.print(", "); ) ) ) 

आउटपुट

 ArrayBlockingQueue: (डॉग, कैट, हॉर्स) एक्सेस की गई तत्व: डॉग ArrayBlockingQueue तत्व: डॉग, कैट, हॉर्स, 

तत्वों को निकालें

  • remove()- रिटर्न और कतार अवरोधन सरणी से एक निर्दिष्ट तत्व निकालता है। यह एक अपवाद फेंकता है अगर कतार खाली है।
  • poll()- रिटर्न और कतार अवरोधन सरणी से एक निर्दिष्ट तत्व निकालता है। nullयदि कतार खाली है तो यह वापस आ जाती है।
  • clear() - सरणी अवरुद्ध कतार से सभी तत्वों को निकालता है।

उदाहरण के लिए,

 import java.util.concurrent.ArrayBlockingQueue; class Main ( public static void main(String() args) ( ArrayBlockingQueue animals = new ArrayBlockingQueue(5); animals.add("Dog"); animals.add("Cat"); animals.add("Horse"); System.out.println("ArrayBlockingQueue: " + animals); // Using remove() String element1 = animals.remove(); System.out.println("Removed Element:"); System.out.println("Using remove(): " + element1); // Using poll() String element2 = animals.poll(); System.out.println("Using poll(): " + element2); // Using clear() animals.clear(); System.out.println("Updated ArrayBlockingQueue: " + animals); ) ) 

आउटपुट

 ArrayBlockingQueue: (डॉग, कैट, हॉर्स) निकाले गए तत्व: रिमूव का उपयोग करना (): डॉग यूज पोल (): कैट अपडेटेड ArrayBlockingQueue: () 

डाल () और ले () विधि

मल्टीथ्रेडिंग प्रक्रियाओं में, हम एक धागे के संचालन को दूसरे धागे से सिंक्रनाइज़ करने के लिए उपयोग put()और take()ब्लॉक कर सकते हैं । ये विधियाँ तब तक प्रतीक्षा करेंगी जब तक कि उन्हें सफलतापूर्वक निष्पादित नहीं किया जा सकता।

डाल () विधि

एक सरणी अवरोधन कतार के अंत में एक तत्व जोड़ने के लिए, हम put()विधि का उपयोग कर सकते हैं ।

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

उदाहरण के लिए,

 import java.util.concurrent.ArrayBlockingQueue; class Main ( public static void main(String() args) ( ArrayBlockingQueue animals = new ArrayBlockingQueue(5); try ( // Add elements to animals animals.put("Dog"); animals.put("Cat"); System.out.println("ArrayBlockingQueue: " + animals); ) catch(Exception e) ( System.out.println(e); ) ) ) 

आउटपुट

 ArrayBlockingQueue: (डॉग, कैट) 

यहां, put()विधि InterruptedExceptionप्रतीक्षा करते समय बाधित होने पर फेंक सकती है। इसलिए, हमें इसे एक प्रयास के अंदर संलग्न करना होगा … ब्लॉक को पकड़ना चाहिए।

ले () विधि

To return and remove an element from the front of the array blocking queue, we can use the take() method.

If the array blocking queue is empty, it waits until there are elements in the array blocking queue to be deleted.

For example,

 import java.util.concurrent.ArrayBlockingQueue; class Main ( public static void main(String() args) ( ArrayBlockingQueue animals = new ArrayBlockingQueue(5); try ( //Add elements to animals animals.put("Dog"); animals.put("Cat"); System.out.println("ArrayBlockingQueue: " + animals); // Remove an element String element = animals.take(); System.out.println("Removed Element: " + element); ) catch(Exception e) ( System.out.println(e); ) ) ) 

Output

 ArrayBlockingQueue: (Dog, Cat) Removed Element: Dog 

Here, the take() method will throw an InterrupedException if it is interrupted while waiting. Hence, we must enclose it inside a try… catch block.

Other Methods

Methods Descriptions
contains(element) Searches the array blocking queue for the specified element.If the element is found, it returns true, if not it returns false.
size() Returns the length of the array blocking queue.
toArray() Converts array blocking queue to an array and returns it.
toString() Converts the array blocking queue to string

Why use ArrayBlockingQueue?

ArrayBlockingQueueउपयोग अपने आंतरिक भंडारण के रूप में सरणियों का उपयोग करता है।

इसे एक थ्रेड-सुरक्षित संग्रह माना जाता है । इसलिए, आमतौर पर इसका उपयोग बहु-थ्रेडिंग अनुप्रयोगों में किया जाता है।

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

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

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