import java.util.concurrent.locks.ReentrantLock; class Main { public static void main(String[] args) { TellerMonitor monitor = new TellerMonitor(); Runnable task = new MinOppgave(monitor); Thread peter = new Thread(task); Thread daniel = new Thread(task); peter.start(); daniel.start(); } } class MinOppgave implements Runnable { private final int MAX_ITERATIONS = 100000; private TellerMonitor monitor; MinOppgave(TellerMonitor m) { monitor = m; } @Override public void run() { System.out.println("Starter telling. TellerMonitor.teller = " + monitor.hentTeller()); for (int i = 0; i < MAX_ITERATIONS; i++) { monitor.okteller(); } System.out.println("Ferdig med telling. TellerMonitor.teller = " + monitor.hentTeller()); } } class TellerMonitor { private int deltTeller = 0; private ReentrantLock lock = new ReentrantLock(); public void okteller() { lock.lock(); try { deltTeller += 1; } finally { lock.unlock(); } } public int hentTeller() { return deltTeller; } }