import java.util.ArrayList; import java.util.concurrent.locks.*; class TestLaaser{ public static void main(String[] args){ ArrayList liste1 = new ArrayList(); liste1.add(1); liste1.add(2); liste1.add(3); liste1.add(4); ArrayList liste2 = new ArrayList(); liste2.add(10); liste2.add(5); liste2.add(8); liste2.add(7); Monitor monitor = new Monitor(); RegnUt r = new RegnUt(liste1,monitor); RegnUt r2 = new RegnUt(liste2,monitor); Thread traad1 = new Thread(r); Thread traad2 = new Thread(r2); traad1.start(); traad2.start(); try{ traad1.join(); traad2.join(); } catch(InterruptedException e){ } monitor.printResultater(); } } class RegnUt implements Runnable{ ArrayList regnestykker; Monitor monitor; RegnUt(ArrayList rs, Monitor m){ regnestykker = rs; monitor = m; } @Override public void run(){ int resultat = 0; for(int t : regnestykker){ resultat = resultat + t; } monitor.leggTil(resultat); //System.out.println("Resultat: " + resultat); } } class Monitor{ ArrayList resultater = new ArrayList(); ReentrantLock laas = new ReentrantLock(); public void leggTil(int i){ laas.lock(); System.out.println("Laaser laas"); try{ resultater.add(i); } finally{ laas.unlock(); System.out.println("Laast opp"); } } public void printResultater(){ System.out.print("Resultater: "); for(int i : resultater){ System.out.print(" " + i); } System.out.println(); } }