import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class TraadEksempelMedMonitor { public static void main(String[] args) { TelleMonitor minMon = new TelleMonitor(); Runnable oppg = new TelleOppgave(minMon); Thread arbeider1 = new Thread(oppg); Thread arbeider2 = new Thread(oppg); arbeider1.start(); arbeider2.start(); } } class TelleMonitor { private final Lock laas; private int fellesTeller; public TelleMonitor() { laas = new ReentrantLock(); fellesTeller = 0; } public void oekMed1() { laas.lock(); try { fellesTeller++; } finally { laas.unlock(); } } public int hentTeller() { return fellesTeller; } } class TelleOppgave implements Runnable { private final int MAX_TELLER = 10000; // hvor mange ganger lokken skal gaa private int fellesTeller = 0; // felles teller som alle traadene vil oeke private TelleMonitor mon; public TelleOppgave(TelleMonitor mon) { this.mon = mon; } public void run() { System.out.println("Starter! Felles teller = " + mon.hentTeller()); for (int i = 0; i < MAX_TELLER; i++) { mon.oekMed1(); } System.out.println("Ferdig! Felles teller = " + mon.hentTeller()); } }