Commit 0b9dea27 by Patryk Czarnik

Konto w wątkach - synchronized

parent 65318c6b
......@@ -38,14 +38,17 @@ public class Konto {
return saldo;
}
public void wplata(int kwota) {
// Gdy jeden wątek wykonuje metodę lubblok synchronizowany na obiekcie X,
// to żaden inny wątek nie może wejść do metody lub sekcji synchronizowanej
// NA TYM SAMYM OBIEKCIE. Taki wątek czeka, aż wykonujący wyjdzie z kodu synchronizowanego.
public synchronized void wplata(int kwota) {
if(kwota <= 0) {
throw new IllegalArgumentException("Kwota wpłaty nie jest dodatnia");
}
saldo += kwota;
}
public void wyplata(int kwota) throws BrakSrodkow {
public synchronized void wyplata(int kwota) throws BrakSrodkow {
if(kwota <= 0) {
throw new IllegalArgumentException("Kwota wypłaty nie jest dodatnia");
}
......@@ -55,7 +58,7 @@ public class Konto {
saldo -= kwota;
}
public void przelew(Konto cel, int kwota) throws BrakSrodkow {
public synchronized void przelew(Konto cel, int kwota) throws BrakSrodkow {
if(kwota <= 0) {
throw new IllegalArgumentException("Kwota przelewu nie jest dodatnia");
}
......@@ -63,6 +66,10 @@ public class Konto {
throw new BrakSrodkow("Za mało środków na koncie nr " + numer);
}
this.saldo -= kwota;
// uwaga - w tej wersji istnieje ryzyko "zakleszczenia" / deadlock
// gdyby dwa wątki w tym samym czasie chciały robić przelew z A na B i z B na A
synchronized (cel) {
cel.saldo += kwota;
}
}
}
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