मेरे पास एक वर्ग है जो वस्तुओं को लेता है BlockingQueue
और take()
एक सतत लूप में कॉल करके उन्हें संसाधित करता है । कुछ बिंदु पर मुझे पता है कि कतार में कोई और ऑब्जेक्ट नहीं जोड़ा जाएगा। मैं take()
विधि को कैसे बाधित करूं ताकि यह अवरुद्ध होना बंद हो जाए?
यहाँ वह वर्ग है जो वस्तुओं को संसाधित करता है:
public class MyObjHandler implements Runnable {
private final BlockingQueue<MyObj> queue;
public class MyObjHandler(BlockingQueue queue) {
this.queue = queue;
}
public void run() {
try {
while (true) {
MyObj obj = queue.take();
// process obj here
// ...
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
और यहाँ वह विधि है जो वस्तुओं को संसाधित करने के लिए इस वर्ग का उपयोग करती है:
public void testHandler() {
BlockingQueue<MyObj> queue = new ArrayBlockingQueue<MyObj>(100);
MyObjectHandler handler = new MyObjectHandler(queue);
new Thread(handler).start();
// get objects for handler to process
for (Iterator<MyObj> i = getMyObjIterator(); i.hasNext(); ) {
queue.put(i.next());
}
// what code should go here to tell the handler
// to stop waiting for more objects?
}