Consumer.java

package ch.hslu.exercises.sw06.ex4;

import org.slf4j.LoggerFactory;
import org.slf4j.Logger;

/**
 * Konsument, der soviele Werte aus einer Queue liest, wie er nur kann.
 */
public final class Consumer implements Runnable {

    private static final Logger LOG = LoggerFactory.getLogger(Consumer.class);
    private final BoundedBuffer<Integer> queue;
    private long sum;

    /**
     * Erzeugt einen Konsumenten, der soviel Integer-Werte ausliest, wie er nur kann.
     *
     * @param queue Queue zum Lesen der Integer-Werte.
     */
    public Consumer(final BoundedBuffer<Integer> queue) {
        this.queue = queue;
        this.sum = 0;
    }

    @Override
    public void run() {
        while (true) {
            try {
                Integer temp = queue.remove(10);
                if (temp == null) {
                    LOG.info("Consumer get timeout");
                    break;
                }
                sum += temp;
            } catch (InterruptedException ex) {
                return;
            }
        }
    }

    /**
     * Liefert die Summe aller ausgelesener Werte.
     *
     * @return Summe.
     */
    public long getSum() {
        return sum;
    }
}