我有一个类,从一个BlockingQueue对象,并通过在连续循环中调用take()处理它们。在某些时候,我知道没有更多的对象将被添加到队列。如何中断take()方法,以便它停止阻塞?
这里是处理对象的类:
public class MyObjHandler implements Runnable {
private final BlockingQueue 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 queue = new ArrayBlockingQueue(100);
MyObjectHandler handler = new MyObjectHandler(queue);
new Thread(handler).start();
// get objects for handler to process
for (Iterator i = getMyObjIterator(); i.hasNext(); ) {
queue.put(i.next());
}
// what code should go here to tell the handler
// to stop waiting for more objects?
}