जावा कंसीलर - ब्लॉकिंग क्यू इंटरफ़ेस
एक java.util.concurrent.BlockingQueue इंटरफ़ेस कतार इंटरफ़ेस का एक उप-संस्करण है, और इसके अलावा ऐसे कार्यों का समर्थन करता है, जो किसी तत्व को पुनर्प्राप्त करने से पहले कतार के गैर-रिक्त होने की प्रतीक्षा कर रहे हैं, और किसी तत्व को संग्रहीत करने से पहले कतार में उपलब्ध होने के लिए स्थान की प्रतीक्षा करें। ।
अवरोधक विधि
अनु क्रमांक। | विधि और विवरण |
---|---|
1 | boolean add(E e) यदि यह संभव हो तो इस तत्व में निर्दिष्ट तत्व सम्मिलित करता है, यदि ऐसा संभव हो तो बिना किसी संभावित प्रतिबंध का उल्लंघन किए, तुरंत सफलता पर वापस लौटकर और यदि वर्तमान में कोई स्थान उपलब्ध नहीं है, तो एक अवैध प्रदर्शन को फेंक दिया जाए। |
2 | boolean contains(Object o) यदि यह कतार निर्दिष्ट तत्व शामिल है, तो सही है। |
3 | int drainTo(Collection<? super E> c) इस कतार से सभी उपलब्ध तत्वों को निकालता है और उन्हें दिए गए संग्रह में जोड़ता है। |
4 | int drainTo(Collection<? super E> c, int maxElements) इस कतार से उपलब्ध तत्वों में से अधिकांश को हटाकर दिए गए संग्रह में जोड़ देता है। |
5 | boolean offer(E e) इस कतार में निर्दिष्ट तत्व को सम्मिलित करता है यदि क्षमता प्रतिबंधों का उल्लंघन किए बिना तुरंत ऐसा करना संभव है, तो वर्तमान में कोई स्थान उपलब्ध नहीं होने पर सफलता और झूठे पर वापस लौटना। |
6 | boolean offer(E e, long timeout, TimeUnit unit) यदि उपलब्ध होने के लिए स्थान आवश्यक हो तो निर्दिष्ट प्रतीक्षा समय तक इस कतार में निर्दिष्ट तत्व सम्मिलित करता है। |
7 | E poll(long timeout, TimeUnit unit) इस कतार के प्रमुख को पुनः प्राप्त करता है और हटाता है, यदि तत्व उपलब्ध होने के लिए आवश्यक हो तो निर्दिष्ट प्रतीक्षा समय तक प्रतीक्षा करें। |
8 | void put(E e) इस कतार में निर्दिष्ट तत्व सम्मिलित करता है, यदि उपलब्ध होने के लिए स्थान की प्रतीक्षा कर रहा है। |
9 | int remainingCapacity() उन अतिरिक्त तत्वों की संख्या देता है जिन्हें यह कतार आदर्श रूप से (स्मृति या संसाधन की कमी के अभाव में) अवरुद्ध किए बिना स्वीकार कर सकती है, या कोई आंतरिक सीमा नहीं होने पर Integer.MAX_VALUE। |
10 | boolean remove(Object o) इस कतार से निर्दिष्ट तत्व का एक भी उदाहरण निकालता है, अगर यह मौजूद है। |
1 1 | E take() इस कतार के प्रमुख को निकालता है और हटाता है, यदि कोई तत्व उपलब्ध होने तक आवश्यक हो तो प्रतीक्षा करता है। |
उदाहरण
निम्न TestThread प्रोग्राम थ्रेड आधारित वातावरण में BlockingQueue इंटरफ़ेस का उपयोग दिखाता है।
import java.util.Random;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
public class TestThread {
public static void main(final String[] arguments) throws InterruptedException {
BlockingQueue<Integer> queue = new ArrayBlockingQueue<Integer>(10);
Producer producer = new Producer(queue);
Consumer consumer = new Consumer(queue);
new Thread(producer).start();
new Thread(consumer).start();
Thread.sleep(4000);
}
static class Producer implements Runnable {
private BlockingQueue<Integer> queue;
public Producer(BlockingQueue queue) {
this.queue = queue;
}
@Override
public void run() {
Random random = new Random();
try {
int result = random.nextInt(100);
Thread.sleep(1000);
queue.put(result);
System.out.println("Added: " + result);
result = random.nextInt(100);
Thread.sleep(1000);
queue.put(result);
System.out.println("Added: " + result);
result = random.nextInt(100);
Thread.sleep(1000);
queue.put(result);
System.out.println("Added: " + result);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
static class Consumer implements Runnable {
private BlockingQueue<Integer> queue;
public Consumer(BlockingQueue queue) {
this.queue = queue;
}
@Override
public void run() {
try {
System.out.println("Removed: " + queue.take());
System.out.println("Removed: " + queue.take());
System.out.println("Removed: " + queue.take());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
यह निम्नलिखित परिणाम का उत्पादन करेगा।
उत्पादन
Added: 52
Removed: 52
Added: 70
Removed: 70
Added: 27
Removed: 27