import java.util.ArrayList; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class FellesData { private ArrayList fellesTall = new ArrayList<>(); Lock laas = new ReentrantLock(); Condition ikkeTom = laas.newCondition(); // lager en condition ikkeTom på laas -> Hvis fellesTall er tom, skal // tråder vente på at tall blir lagt inn public int hentTall() { laas.lock(); try { if (fellesTall.size() == 0) { try { ikkeTom.await(); // Må legges i en EGEN try-catch med InterruptedException } catch (InterruptedException e) { e.printStackTrace(); } } int indeks = fellesTall.size() - 1; sleep(100); int tall = fellesTall.remove(indeks); return tall; } finally { laas.unlock(); } } public void leggTilTall(int i) { laas.lock(); try { fellesTall.add(i); ikkeTom.signal(); // kan ikke kalle på ikkeTom.signal() uten å ha låst låsen som er forbundet med // ikkeTom.signal() } finally { laas.unlock(); } } public void sleep(int millisekunder) { try { Thread.sleep(millisekunder); } catch (InterruptedException e) { System.out.println(e.getMessage()); } } }