import java.util.concurrent.locks.ReentrantLock; public class Main { public static void main(String[] args) { TellerMonitor monitor = new TellerMonitor(); Runnable teller = new Teller(monitor); Thread teller_traa1 = new Thread(teller); Thread teller_traa2 = new Thread(teller); teller_traa1.start(); teller_traa2.start(); } } class Teller implements Runnable { private final int MAX_ITERASJONER = 100000; private TellerMonitor monitor; Teller(TellerMonitor m) { monitor = m; } @Override public void run() { System.out.println("Startet teller. tallIBoks = " + monitor.hentTallIBoks()); for (int i = 0; i < MAX_ITERASJONER; i++) { monitor.okTall(); } System.out.println("Teller sluttet. tallIBoks = " + monitor.hentTallIBoks()); } } class TellerMonitor { private int tallIBoks = 0; private ReentrantLock lock = new ReentrantLock(); void okTall() { int tallHentetUt; lock.lock(); try { tallHentetUt = tallIBoks; tallIBoks = tallHentetUt + 1; } finally { lock.unlock(); } } int hentTallIBoks() { return tallIBoks; } }