import java.util.concurrent.CountDownLatch; /** * Denne klassen representerer selve papirflyfabrikken. */ public class Papirflyfabrikk { final int MAKS_ANTALL_PAPIRFLY; int antBrettere, antKastere; SamlebaandMonitor samlebaand; CountDownLatch brettereFerdig, kastereFerdig; Thread[] brettere, kastere; boolean erStengt = false; public Papirflyfabrikk( int maksPapirfly, int antBrettere, int antKastere ) { MAKS_ANTALL_PAPIRFLY = maksPapirfly; this.antBrettere = antBrettere; this.antKastere = antKastere; samlebaand = new SamlebaandMonitor(maksPapirfly, this); brettere = new Thread[antBrettere]; kastere = new Thread[antKastere]; brettereFerdig = new CountDownLatch(antBrettere); kastereFerdig = new CountDownLatch(antKastere); } /** * Denne metoden pr?ver ? sette legge et papirfly p? * samleb?ndet * * @param traadId - Id-en til tr?den som pr?ver ? legge til * et papirfly */ public void lagPapirfly(int traadId) { try { samlebaand.settInn(traadId); } catch (InterruptedException e) { e.printStackTrace(); } } /** * Denne metoden pr?ver ? hente ut et papirfly fra samleb?ndet * * @param traadId - Id-en til tr?den som pr?ver ? hente ut et * papirfly */ public void kastPapirfly(int traadId) { try { samlebaand.hentUt(traadId); } catch (InterruptedException e) { e.printStackTrace(); } } /** * Denne metoden ?pner fabrikken og setter i gang alle tr?dene. * N?r alle tr?dene er ferdige stenges fabrikken. */ public void startFabrikk() { System.out.println("Fabrikken ?pner."); for (int i = 0; i < antBrettere; i++) { brettere[i] = new Thread(new PapirflyBretter(i, this, 10, brettereFerdig)); brettere[i].start(); } for (int i = 0; i < antKastere; i++) { kastere[i] = new Thread(new PapirflyKaster(i, this, 10, kastereFerdig)); kastere[i].start(); } for (Thread p : brettere) { try { p.join(); } catch (InterruptedException e) { e.printStackTrace(); } } for (Thread p : kastere) { try { p.join(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("Fabrikken er stengt for i dag."); } }