import java.util.ArrayList; import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.locks.Lock; class Butikk { private String[] varehylle = new String[50]; private ArrayList ansattListe = new ArrayList(); private int antallAktiveKunder; private boolean erButikkStengt = false; private Lock laas = new ReentrantLock(); public Butikk(int antallAnsatte, int antallKunder) { for (int i = 0; i < antallAnsatte; i++) { Butikkansatt nyAnsatt = new Butikkansatt(this); ansattListe.add(nyAnsatt); nyAnsatt.start(); } antallAktiveKunder = antallKunder; } public void fyllVarehylle() { laas.lock(); try { for (int i = 0; i < varehylle.length; i++) { if (varehylle[i] == null) { varehylle[i] = "En vare"; printAntallVarer(); return; } } System.out.println("Varehyllen er full! Trengte ikke sette ut vare."); } finally { laas.unlock(); } } public String plukkVare() { laas.lock(); try { for (int i = 0; i < varehylle.length; i++) { if (varehylle[i] != null) { String vare = varehylle[i]; varehylle[i] = null; printAntallVarer(); return vare; } } return null; } finally { laas.unlock(); } } public void printAntallVarer() { int antallVarer = 0; for (int i = 0; i < varehylle.length; i++) { if (varehylle[i] != null) { antallVarer++; } } System.out.println("Antall varer: " + antallVarer); } public void ferdigHandlet() { laas.lock(); try { antallAktiveKunder--; if (antallAktiveKunder == 0) { stengButikk(); } } finally { laas.unlock(); } } public void stengButikk() { System.out.println("Paa tide aa stenge butikken!"); for (Butikkansatt ansatt: ansattListe) { ansatt.ferdigPaaJobb(); } erButikkStengt = true; } public boolean erButikkStengt() { return erButikkStengt; } }