Commit 8fed9d0b by Patryk Czarnik

wait/notify i wyplataCzekaj

parent cfb86bdf
......@@ -37,8 +37,11 @@ public class Konto {
throw new IllegalArgumentException("Niedodatnia kwota w metodzie wplata");
}
saldo += kwota;
notify();
// budzi jeden z czekających wątków
}
// W tej wersji metoda w razie braku środków wyrzuca wyjątek
public synchronized void wyplata(int kwota) throws BrakSrodkow {
if(kwota <= 0) {
throw new IllegalArgumentException("Niedodatnia kwota w metodzie wyplata");
......@@ -48,4 +51,22 @@ public class Konto {
}
saldo -= kwota;
}
// W tej wersji metoda w razie braku środków czeka aż pieniądze zostaną wpłacone
public synchronized void wyplataCzekaj(int kwota) {
if(kwota <= 0) {
throw new IllegalArgumentException("Niedodatnia kwota w metodzie wyplata");
}
try {
while(kwota > saldo) {
wait();
}
saldo -= kwota;
notify();
// budzenie kaskadowe: jeśli dla jednego wątku wystarczyło, to budzony jest następny
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
......@@ -24,7 +24,7 @@ public class Zycie1 {
Thread.sleep(700);
try {
konto.wyplata(300);
System.out.println("wyplacacz: po wpłacie jest " + konto.getSaldo());
System.out.println("wyplacacz: po wypłacie jest " + konto.getSaldo());
} catch (BrakSrodkow e) {
System.err.println("wyplacacz: " + e.getMessage());
}
......
package konto;
public class Zycie2 {
public static void main(String[] args) {
Konto konto = new Konto(1, "Ala", 1400);
System.out.println("Stan początkowy: " + konto.getSaldo());
Thread wplacacz = new Thread(() -> {
try {
while(true) {
Thread.sleep(5000);
konto.wplata(1000);
System.out.println("wplacacz: po wpłacie jest " + konto.getSaldo());
}
} catch (InterruptedException e) {
e.printStackTrace();
}
});
Thread wyplacacz = new Thread(() -> {
try {
while(true) {
Thread.sleep(700);
konto.wyplataCzekaj(300);
System.out.println("wyplacacz: po wypłacie jest " + konto.getSaldo());
}
} catch (InterruptedException e) {
e.printStackTrace();
}
});
System.out.println("Startujemy wątki...");
wplacacz.start();
wyplacacz.start();
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment