Commit 65318c6b by Patryk Czarnik

Konto w wątkach - początek

parent 443a2207
package p19_watki.konto.v0;
public class BrakSrodkow extends Exception {
public BrakSrodkow(String message) {
super(message);
}
}
package p19_watki.konto.v0;
public class Konto {
private final int numer;
private String wlasciciel;
private int saldo;
public Konto(int numer, String wlasciciel, int saldo) {
if(saldo < 0) {
throw new IllegalArgumentException("Saldo ujemne");
}
this.numer = numer;
this.setWlasciciel(wlasciciel);
this.saldo = saldo;
}
@Override
public String toString() {
return "Konto nr " + numer + ", wł: " + wlasciciel + ", saldo: " + saldo;
}
public int getNumer() {
return numer;
}
public String getWlasciciel() {
return wlasciciel;
}
public void setWlasciciel(String wlasciciel) {
if(wlasciciel == null) {
throw new IllegalArgumentException("Wlasciciel nieokreślony");
}
this.wlasciciel = wlasciciel;
}
public int getSaldo() {
return saldo;
}
public 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 {
if(kwota <= 0) {
throw new IllegalArgumentException("Kwota wypłaty nie jest dodatnia");
}
if(kwota > saldo) {
throw new BrakSrodkow("Za mało środków na koncie nr " + numer);
}
saldo -= kwota;
}
public void przelew(Konto cel, int kwota) throws BrakSrodkow {
if(kwota <= 0) {
throw new IllegalArgumentException("Kwota przelewu nie jest dodatnia");
}
if(kwota > saldo) {
throw new BrakSrodkow("Za mało środków na koncie nr " + numer);
}
this.saldo -= kwota;
cel.saldo += kwota;
}
}
package p19_watki.konto.v0;
public class Przeploty {
public static void main(String[] args) {
final int KWOTA = 10;
final int ILE_RAZY = 100_000;
Konto konto = new Konto(1, "Ala", 1_000_000);
System.out.println("początek main: " + konto);
Thread wplacacz = new Thread(() -> {
for(int i = 0; i < ILE_RAZY; i++) {
konto.wplata(KWOTA);
}
});
Thread wyplacacz = new Thread(() -> {
for(int i = 0; i < ILE_RAZY; i++) {
try {
konto.wyplata(KWOTA);
} catch (BrakSrodkow e) {
System.err.println(e.getMessage());
}
}
});
try {
wplacacz.start();
wyplacacz.start();
// main poczeka, aż zakończą się uruchomione wątki
wplacacz.join();
wyplacacz.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(" koniec main: " + konto);
}
}
package p19_watki.konto.v1;
public class BrakSrodkow extends Exception {
public BrakSrodkow(String message) {
super(message);
}
}
package p19_watki.konto.v1;
public class Konto {
private final int numer;
private String wlasciciel;
private int saldo;
public Konto(int numer, String wlasciciel, int saldo) {
if(saldo < 0) {
throw new IllegalArgumentException("Saldo ujemne");
}
this.numer = numer;
this.setWlasciciel(wlasciciel);
this.saldo = saldo;
}
@Override
public String toString() {
return "Konto nr " + numer + ", wł: " + wlasciciel + ", saldo: " + saldo;
}
public int getNumer() {
return numer;
}
public String getWlasciciel() {
return wlasciciel;
}
public void setWlasciciel(String wlasciciel) {
if(wlasciciel == null) {
throw new IllegalArgumentException("Wlasciciel nieokreślony");
}
this.wlasciciel = wlasciciel;
}
public int getSaldo() {
return saldo;
}
public 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 {
if(kwota <= 0) {
throw new IllegalArgumentException("Kwota wypłaty nie jest dodatnia");
}
if(kwota > saldo) {
throw new BrakSrodkow("Za mało środków na koncie nr " + numer);
}
saldo -= kwota;
}
public void przelew(Konto cel, int kwota) throws BrakSrodkow {
if(kwota <= 0) {
throw new IllegalArgumentException("Kwota przelewu nie jest dodatnia");
}
if(kwota > saldo) {
throw new BrakSrodkow("Za mało środków na koncie nr " + numer);
}
this.saldo -= kwota;
cel.saldo += kwota;
}
}
package p19_watki.konto.v1;
public class Przeploty {
public static void main(String[] args) {
final int KWOTA = 10;
final int ILE_RAZY = 100_000;
Konto konto = new Konto(1, "Ala", 1_000_000);
System.out.println("początek main: " + konto);
Thread wplacacz = new Thread(() -> {
for(int i = 0; i < ILE_RAZY; i++) {
konto.wplata(KWOTA);
}
});
Thread wyplacacz = new Thread(() -> {
for(int i = 0; i < ILE_RAZY; i++) {
try {
konto.wyplata(KWOTA);
} catch (BrakSrodkow e) {
System.err.println(e.getMessage());
}
}
});
try {
wplacacz.start();
wyplacacz.start();
// main poczeka, aż zakończą się uruchomione wątki
wplacacz.join();
wyplacacz.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(" koniec main: " + konto);
}
}
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