इस ट्यूटोरियल में, हम उदाहरणों की मदद से लिंक्डब्लॉकिंग क्यू क्लास और उसके तरीकों के बारे में जानेंगे।
LinkedBlockingQueue
जावा Collections
फ्रेमवर्क का वर्ग एक लिंक की गई सूची का उपयोग करके अवरुद्ध कतार कार्यान्वयन प्रदान करता है।
यह जावा ब्लॉकिंगक्यू इंटरफेस को लागू करता है।
LinkedBlockingQueue बनाना
लिंक की गई अवरुद्ध कतार बनाने के लिए, हमें java.util.concurrent.LinkedBlockingQueue
पैकेज को आयात करना होगा ।
यहाँ हम जावा में एक लिंक की गई अवरुद्ध कतार बना सकते हैं:
1. प्रारंभिक क्षमता के बिना
LinkedBlockingQueue animal = new LinkedBlockingQueue();
यहां डिफ़ॉल्ट प्रारंभिक क्षमता 2 31 -1 होगी।
2. प्रारंभिक क्षमता के साथ
LinkedBlockingQueue animal = new LinkedBlockingQueue(int capacity);
यहाँ,
- प्रकार - लिंक किए गए अवरुद्ध कतार का प्रकार
- क्षमता - लिंक अवरुद्ध कतार का आकार
उदाहरण के लिए,
// Creating String type LinkedBlockingQueue with size 5 LinkedBlockingQueue animals = new LinkedBlockingQueue(5); // Creating Integer type LinkedBlockingQueue with size 5 LinkedBlockingQueue age = new LinkedBlockingQueue(5);
नोट: लिंक की गई सूची का आकार प्रदान करना अनिवार्य नहीं है।
लिंक्डब्लॉकिंग क्यू के तरीके
LinkedBlockingQueue
वर्ग BlockingQueue इंटरफ़ेस में सभी तरीकों के कार्यान्वयन प्रदान करता है।
इन विधियों का उपयोग लिंक की गई अवरुद्ध कतारों से तत्वों को सम्मिलित करने, एक्सेस करने और हटाने के लिए किया जाता है।
इसके अलावा, हम दो तरीकों के बारे में जानेंगे put()
और take()
लिंकिंग ब्लॉकिंग कतार में ब्लॉकिंग ऑपरेशन का समर्थन करेंगे।
ये दो विधियाँ अन्य विशिष्ट कतारों से जुड़ी अवरुद्ध कतार को अलग करती हैं।
तत्वों को सम्मिलित करें
add()
- लिंक किए गए अवरुद्ध कतार में एक निर्दिष्ट तत्व सम्मिलित करता है। यह एक अपवाद फेंकता है यदि कतार भरी हुई है।offer()
- लिंक किए गए अवरुद्ध कतार में एक निर्दिष्ट तत्व सम्मिलित करता है।false
यदि कतार भर जाती है तो यह वापस आ जाती है।
उदाहरण के लिए,
import java.util.concurrent.LinkedBlockingQueue; class Main ( public static void main(String() args) ( LinkedBlockingQueue animals = new LinkedBlockingQueue(5); // Using add() animals.add("Dog"); animals.add("Cat"); // Using offer() animals.offer("Horse"); System.out.println("LinkedBlockingQueue: " + animals); ) )
आउटपुट
लिंक्डब्लॉकिंग क्यू: (कुत्ता, बिल्ली, घोड़ा)
तत्वों तक पहुँच
peek()
- लिंक किए गए अवरुद्ध कतार के सामने से एक तत्व लौटाता है।null
यदि कतार खाली है तो यह वापस आ जाती है।iterator()
- लिंक किए गए अवरोध कतार से एक तत्व को क्रमिक रूप से एक्सेस करने के लिए एक इटरेटर ऑब्जेक्ट लौटाता है। यह एक अपवाद फेंकता है अगर कतार खाली है। हमेंjava.util.Iterator
इसका उपयोग करने के लिए पैकेज आयात करना चाहिए ।
उदाहरण के लिए,
import java.util.concurrent.LinkedBlockingQueue; import java.util.Iterator; class Main ( public static void main(String() args) ( LinkedBlockingQueue animals = new LinkedBlockingQueue(5); // Add elements animals.add("Dog"); animals.add("Cat"); animals.add("Horse"); System.out.println("LinkedBlockingQueue: " + animals); // Using peek() String element = animals.peek(); System.out.println("Accessed Element: " + element); // Using iterator() Iterator iterate = animals.iterator(); System.out.print("LinkedBlockingQueue Elements: "); while(iterate.hasNext()) ( System.out.print(iterate.next()); System.out.print(", "); ) ) )
आउटपुट
LinkedBlockingQueue: (डॉग, कैट, हॉर्स) अभिगम तत्व: डॉग लिंक्डब्लॉकिंग क्यू तत्व: डॉग, कैट, हॉर्स,
तत्वों को निकालें
remove()
- रिटर्न और लिंक्ड ब्लॉकिंग कतार से एक निर्दिष्ट तत्व निकालता है। यह एक अपवाद फेंकता है अगर कतार खाली है।poll()
- रिटर्न और लिंक्ड ब्लॉकिंग कतार से एक निर्दिष्ट तत्व निकालता है।null
यदि कतार खाली है तो यह वापस आ जाती है।clear()
- लिंक किए गए अवरुद्ध कतार से सभी तत्वों को निकालता है।
उदाहरण के लिए,
import java.util.concurrent.LinkedBlockingQueue; class Main ( public static void main(String() args) ( LinkedBlockingQueue animals = new LinkedBlockingQueue(5); animals.add("Dog"); animals.add("Cat"); animals.add("Horse"); System.out.println("LinkedBlockingQueue " + 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 LinkedBlockingQueue " + animals); ) )
आउटपुट
जुड़े
डाल () और ले () तरीके
मल्टीथ्रेडिंग प्रक्रियाओं में, हम एक धागे के संचालन को दूसरे धागे से सिंक्रनाइज़ करने के लिए उपयोग put()
और take()
ब्लॉक कर सकते हैं । ये विधियाँ तब तक प्रतीक्षा करेंगी जब तक कि उन्हें सफलतापूर्वक निष्पादित नहीं किया जा सकता।
डाल () विधि
लिंक किए गए अवरुद्ध कतार के अंत में निर्दिष्ट तत्व डालने के लिए, हम put()
विधि का उपयोग करते हैं ।
If the linked blocking queue is full, it waits until there is space in the linked blocking queue to insert the element.
For example,
import java.util.concurrent.LinkedBlockingQueue; class Main ( public static void main(String() args) ( LinkedBlockingQueue animals = new LinkedBlockingQueue(5); try ( // Add elements to animals animals.put("Dog"); animals.put("Cat"); System.out.println("LinkedBlockingQueue: " + animals); ) catch(Exception e) ( System.out.println(e); ) ) )
Output
LinkedBlockingQueue: (Dog, Cat)
Here, the put()
method may throw an InterruptedException
if it is interrupted while waiting. Hence, we must enclose it inside a try… catch block.
take() Method
To return and remove an element from the front of the linked blocking queue, we can use the take()
method.
If the linked blocking queue is empty, it waits until there are elements in the linked blocking queue to be deleted.
For example,
import java.util.concurrent.LinkedBlockingQueue; class Main ( public static void main(String() args) ( LinkedBlockingQueue animals = new LinkedBlockingQueue(5); try ( //Add elements to animals animals.put("Dog"); animals.put("Cat"); System.out.println("LinkedBlockingQueue: " + animals); // Remove an element String element = animals.take(); System.out.println("Removed Element: " + element); System.out.println("New LinkedBlockingQueue: " + animals); ) catch(Exception e) ( System.out.println(e); ) ) )
Output
LinkedBlockingQueue: (Dog, Cat) Removed Element: Dog New LinkedBlockingQueue: (Cat)
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) | निर्दिष्ट तत्व के लिए लिंक की गई अवरुद्ध कतार खोजता है। यदि तत्व पाया जाता है, तो यह वापस लौटता है true , यदि यह वापस नहीं आता है false । |
size() | लिंक की गई अवरुद्ध कतार की लंबाई लौटाता है। |
toArray() | लिंक की गई कतार को एक सरणी में जोड़ता है और सरणी को लौटाता है। |
toString() | लिंक की गई अवरुद्ध कतार को स्ट्रिंग में परिवर्तित करता है |
LinkedBlockingQueue का उपयोग क्यों करें?
LinkedBlockingQueue
का उपयोग करता है इसकी आंतरिक मेमोरी के रूप सूचियों जुड़े।
इसे एक थ्रेड-सुरक्षित संग्रह माना जाता है । इसलिए, आमतौर पर इसका उपयोग बहु-थ्रेडिंग अनुप्रयोगों में किया जाता है।
मान लीजिए, एक धागा कतार में तत्वों को सम्मिलित कर रहा है और दूसरा धागा कतार से तत्वों को निकाल रहा है।
अब, यदि पहला धागा दूसरे धागे की तुलना में धीमा है, तो लिंक की गई अवरुद्ध कतार दूसरे धागे का इंतजार कर सकती है जब तक कि पहला धागा अपने संचालन को पूरा न कर ले।