Hej. Jag får inte riktigt kläm på det här.
Jag skapar två trådar som har tillgång till en monitor med "synchronized"-funktioner. Nu är det ju så att båda trådar kör, men de kör hela sin grej efter varandra. Dvs varje for-loop kör tills den är slut. Jag hade i stället önskat att de hade alternerat. Testat olika saker som att lägga till en semafor som skulle få den andra att köra och vice versa, men jag lyckas inte lösa det.
Koden är som följer.
Jag skapar två trådar som har tillgång till en monitor med "synchronized"-funktioner. Nu är det ju så att båda trådar kör, men de kör hela sin grej efter varandra. Dvs varje for-loop kör tills den är slut. Jag hade i stället önskat att de hade alternerat. Testat olika saker som att lägga till en semafor som skulle få den andra att köra och vice versa, men jag lyckas inte lösa det.
Koden är som följer.
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; } }