Commit 2caeda77 by Patryk Czarnik

Konto w wątkach - wypłacanie z czekaniem

parent 95a3dfa0
......@@ -46,6 +46,7 @@ public class Konto {
throw new IllegalArgumentException("Kwota wpłaty nie jest dodatnia");
}
saldo += kwota;
notify();
}
public synchronized void wyplata(int kwota) throws BrakSrodkow {
......@@ -58,6 +59,20 @@ public class Konto {
saldo -= kwota;
}
public synchronized void wyplataCzekaj(int kwota) throws BrakSrodkow {
if(kwota <= 0) {
throw new IllegalArgumentException("Kwota wypłaty nie jest dodatnia");
}
try {
while(kwota > saldo) {
wait();
}
saldo -= kwota;
notify();
} catch (InterruptedException e) {
}
}
public synchronized void przelew(Konto cel, int kwota) throws BrakSrodkow {
if(kwota <= 0) {
throw new IllegalArgumentException("Kwota przelewu nie jest dodatnia");
......@@ -70,6 +85,7 @@ public class Konto {
// 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;
cel.notify();
}
}
}
package p19_watki.konto.v1;
public class Wyplacanie2 {
public static void main(String[] args) {
Konto konto = new Konto(1, "Ala", 15_000);
System.out.println("początek main: " + konto);
Thread wplacacz = new Thread(() -> {
try {
while(true) {
Thread.sleep(10_000);
konto.wplata(10_000);
System.out.println("Po wpłacie jest " + konto.getSaldo());
}
} catch (InterruptedException e) {}
});
Thread wyplacacz = new Thread(() -> {
try {
while(true) {
try {
Thread.sleep(500);
konto.wyplataCzekaj(700);
System.out.println("Po wypłacie jest " + konto.getSaldo());
} catch (BrakSrodkow e) {
System.err.println(e.getMessage());
}
}
} catch (InterruptedException e) {}
});
wplacacz.start();
wyplacacz.start();
System.out.println("wątki uruchomione");
}
}
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