RaceHorse.java

package ch.hslu.exercises.sw06.ex2;

import java.util.Random;
import java.util.concurrent.Semaphore;

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

/**
 * Ein Rennpferd, das durch ein Startsignal losläuft. Nach einer zufälligen Zeit
 * kommt es im Ziel an.
 */
public final class RaceHorse implements Runnable {

    private static final Logger LOG = LoggerFactory.getLogger(RaceHorse.class);
    private final Synch startSignal;
    private final Semaphore counter;
    private final String name;
    private final Random random;

    /**
     * Erzeugt ein Rennpferd, das in die Starterbox eintritt.
     *
     * @param startSignal Starterbox.
     * @param name        Name des Pferdes.
     */
    public RaceHorse(final Synch startSignal, final String name, final Semaphore counter) {
        this.startSignal = startSignal;
        this.name = name;
        this.random = new Random();
        this.counter = counter;
    }

    @Override
    public void run() {
        LOG.info("Rennpferd {} geht in die Box.", name);
        try {
            counter.release();
            startSignal.acquire();
            LOG.info("Rennpferd {} laeuft los...", name);
            Thread.sleep(random.nextInt(3000));
        } catch (InterruptedException ex) {
            LOG.debug("Ich muss nicht mehr ins Ziel laufen");
        }
        LOG.info("Rennpferd {} ist im Ziel.", name);
    }
}