Producer.java

package ch.hslu.exercises.sw06.ex4;

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

/**
 * Produzent, der eine maximale Anzahl Werte produziert und diese in eine Queue speichert.
 */
public final class Producer implements Runnable {

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

    /**
     * Erzeugt einen Produzent, der eine bestimmte Anzahl Integer-Werte produziert.
     *
     * @param queue Queue zum Speichern der Integer-Werte.
     * @param max   Anzahl Integer-Werte.
     */
    public Producer(final BoundedBuffer<Integer> queue, final int max) {
        this.queue = queue;
        this.maxRange = max;
        this.sum = 0;
    }

    @Override
    public void run() {
        for (int i = 0; i < maxRange; i++) {
            try {
                if (!queue.add(i, 10)) {
                    LOG.info("Producer put timeout");
                    break;
                }
                sum += i;
            } catch (InterruptedException ex) {
                return;
            }
        }
    }

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