import java.util.ArrayList; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class Utleveringssted { private String navn; private ArrayList pakker = new ArrayList<>(); private Lock laas = new ReentrantLock(); public Utleveringssted(String na) { navn = na; } public void leverPakke(Pakke pakke) { laas.lock(); try { pakker.add(pakke); } finally { laas.unlock(); } } public Pakke hentPakke(Kunde kunde) { laas.lock(); try { Pakke returneres = null; int indeksSomSkalFjernes = -1; for (Pakke pakke : pakker) { if (pakke.hentBestiltAv().equals(kunde.hentNavn())) { returneres = pakke; indeksSomSkalFjernes = pakker.indexOf(pakke); break; } } // Fant en faktisk pakke, fjerner den fra lista if (indeksSomSkalFjernes != -1) pakker.remove(indeksSomSkalFjernes); // Hvis vi gikk gjennom hele for-løkka uten å finne en pakke til en kunde, // så betyr det at kunden har hentet alt og kan slutte å konsumere (null returneres) return returneres; } finally { laas.unlock(); } } }