import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.locks.Condition; public class BrusMaskin { private final Lock brusLaas = new ReentrantLock(); private final Condition harBrusTilSalgs = brusLaas.newCondition(); private final Condition trengerPaafyll = brusLaas.newCondition(); private final int kapasitet; private int brusTeller; public BrusMaskin(int kapasitet) { this.kapasitet = kapasitet; brusTeller = 0; } public void kjopBrus() { brusLaas.lock(); try { while(brusTeller == 0) { harBrusTilSalgs.await(); } System.out.println("Kjoper brus, antall igjen er " + --brusTeller); if (brusTeller == 0) { System.out.println("Maskinen trenger paafyll"); trengerPaafyll.signal(); } } catch (InterruptedException e) { System.out.println("Avbrutt under bruskjop"); } finally { brusLaas.unlock(); } } public void fyllBrus() { brusLaas.lock(); try { while(brusTeller > 0) { trengerPaafyll.await(); } brusTeller = kapasitet; System.out.printf("Maskinen er fylt opp. Det er %d brus i maskinen%n", brusTeller); harBrusTilSalgs.signalAll(); } catch (InterruptedException e) { System.out.println("Avbrutt under paafyll"); } finally { brusLaas.unlock(); } } }