package joshua.discriminative.training.parallel;
import java.util.concurrent.BlockingQueue;
import java.util.logging.Logger;
/**This implements consumer of the "one-producer, multiple consumers" model.
* */
public abstract class Consumer<O> extends Thread {
private final BlockingQueue<O> queue;
abstract public void consume(O x);
abstract public boolean isPoisonObject(O x);
private int numObjConsumed = 0;
/** Logger for this class. */
private static final Logger logger =
Logger.getLogger(Consumer.class.getName());
public Consumer(BlockingQueue<O> q){
queue = q;
}
public void run() {
try {
while(true) {
O obj = queue.take();
if(isPoisonObject(obj)){
//logger.info("================== eat poison object, thread ends! numObjConsumed="+numObjConsumed);
break;
}else{
consume(obj);
numObjConsumed++;
}
}
} catch (InterruptedException ex) {
//TODO
}
}
}