import java.util.concurrent.CountDownLatch; /** * Denne klassen representerer en arbeider som bretter * papirfly p? papirflyfabrikken. */ public class PapirflyBretter implements Runnable { Papirflyfabrikk fabrikk; int id, papirflyPerDag; CountDownLatch ferdig; public PapirflyBretter(int id, Papirflyfabrikk fabrikk, int papirflyPerDag, CountDownLatch ferdig) { this.id = id; this.papirflyPerDag = papirflyPerDag; this.fabrikk = fabrikk; this.ferdig = ferdig; } @Override public void run() { for (int i = 0; i < papirflyPerDag; i++) { fabrikk.lagPapirfly(id); if (fabrikk.erStengt) { System.out.printf("Papirflybretter nr. %d er ferdig for dagen.%n", id); ferdig.countDown(); return; } } System.out.printf("Papirflybretter nr. %d er ferdig for dagen.%n", id); /* Her teller vi ned og venter p? en CountDownLatch * slik at vi kan v?re sikre p? at koden etter ikke * blir kj?rt f?r alle tr?dene er ferdige med koden * over. */ ferdig.countDown(); try { ferdig.await(); } catch (InterruptedException e) { e.printStackTrace(); } /* Stenger fabrikken og sier ifra til alle papirfly- * bretterne at de kan g? hjem for dagen. */ fabrikk.erStengt = true; fabrikk.samlebaand.laas.lock(); try { fabrikk.samlebaand.ikkeTomt.signalAll(); } finally { fabrikk.samlebaand.laas.unlock(); } } }