import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; class Telleprogram { public static void main(String[] args) { TelleMonitor monitor = new TelleMonitor(); TelleTask telle = new TelleTask(monitor); for (int i = 0; i < 5; i++) { new Thread(telle).start(); } System.out.println("Telling er ferdig!"); } } class TelleMonitor { private int deltTeller = 0; Lock laas = new ReentrantLock(); void oek() { laas.lock(); try { deltTeller++; } finally { laas.unlock(); } } int hentTeller() { return deltTeller; } } class TelleTask implements Runnable { private final int MAX_COUNT = 10000; private TelleMonitor monitor; TelleTask(TelleMonitor m) { this.monitor = m; } public void run() { for (int i = 0; i < MAX_COUNT; i++) { monitor.oek(); } System.out.println("Ferdig! delt teller: " + monitor.hentTeller()); } }