a에서 개체를 가져와 연속 루프에서 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?
}