Hej. Jag fr inte riktigt klm p det hr.
Jag skapar tv trdar som har tillgng till en monitor med "synchronized"-funktioner. Nu r det ju s att bda trdar kr, men de kr hela sin grej efter varandra. Dvs varje for-loop kr tills den r slut. Jag hade i stllet nskat att de hade alternerat. Testat olika saker som att lgga till en semafor som skulle f den andra att kra och vice versa, men jag lyckas inte lsa det.
Koden r som fljer.
Jag skapar tv trdar som har tillgng till en monitor med "synchronized"-funktioner. Nu r det ju s att bda trdar kr, men de kr hela sin grej efter varandra. Dvs varje for-loop kr tills den r slut. Jag hade i stllet nskat att de hade alternerat. Testat olika saker som att lgga till en semafor som skulle f den andra att kra och vice versa, men jag lyckas inte lsa det.
Koden r som fljer.
Kod:
public class Main { public static void thread1(String name, Monitor mon) { for (int i = 0; i < 20; i++) { mon.sub(); } } public static void thread2(String name, Monitor mon) { for (int i = 0; i < 20; i++) { mon.add(); } } public static void main(String[] args) throws InterruptedException { // TODO Auto-generated method stub Monitor mon = new Monitor(); Thread t1 = new Thread(()-> thread1("t1", mon)); Thread t2 = new Thread(()-> thread2("t2", mon)); t1.start(); t2.start(); t1.join(); t2.join(); System.out.println( "\nfinal balance is now: " + mon.get() ); } }
Kod:
public class Monitor { private int balance = 0; public synchronized void add() { balance += 1; System.out.println(Thread.currentThread().getName() + " adds 1 and balance is now : " + balance); } public synchronized void sub() { balance -= 1; System.out.println(Thread.currentThread().getName() + " subtracts 1 and balance is now : " + balance); } public synchronized int get() { return balance; } }