import java.util.ArrayList; import java.util.concurrent.locks.*; public class FruktBod { private ArrayList frukter = new ArrayList<>(); // Kritisk region private Lock l?s = new ReentrantLock(); private Condition harFrukt = l?s.newCondition(); private boolean ferdigProdusert = false; public void leggTilFrukt(String frukt) { l?s.lock(); try { frukter.add(frukt); harFrukt.signalAll(); } finally { l?s.unlock(); } } public String selgFrukt(String frukt) { l?s.lock(); try { while (!ferdigProdusert && !frukter.contains(frukt)) { harFrukt.await(); } if (!frukter.contains(frukt)) { System.out.println("Vi hadde ikke " + frukt + ", womp womp"); return null; } frukter.remove(frukt); return frukt; } catch (InterruptedException e) { System.out.println("Tr?d avbrutt"); } finally { l?s.unlock(); } return null; } public void markerSomFerdig() { l?s.lock(); try { ferdigProdusert = true; harFrukt.signalAll(); } finally { l?s.unlock(); } } }