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);
}
}