Commit b1e9a134 by Patryk Czarnik

pierwsze prztkłady dot wątków

parent 77ded6b9
package na_zywo.watki.konto_v1;
public class Konto {
private final int numer;
private String wlasciciel;
private int saldo;
public Konto(int numer, String wlasciciel, int saldo) {
this.numer = numer;
this.wlasciciel = wlasciciel;
this.saldo = saldo;
}
public int getNumer() {
return numer;
}
public String getWlasciciel() {
return 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) {
if(kwota <= 0) {
throw new IllegalArgumentException("kwota wypłaty nie jest dodatnia");
}
if(kwota > saldo) {
throw new RuntimeException("Brak środków na koncie nr " + numer + ", potrzeba " + kwota + " a jest " + saldo);
}
saldo -= kwota;
}
@Override
public String toString() {
return "Konto{" +
"numer=" + numer +
", wlasciciel='" + wlasciciel + '\'' +
", saldo=" + saldo +
'}';
}
}
package na_zywo.watki.konto_v1;
public class Program1 {
public static void main(String[] args) {
final int ZMIANA = 10;
final int N = 100_000;
Konto konto = new Konto(1, "Ala", ZMIANA*N);
System.out.println(konto);
Thread wplacacz = new Thread(() -> {
for(int i = 0; i < N; i++) {
konto.wplata(ZMIANA);
}
});
Thread wyplacacz = new Thread(() -> {
for(int i = 0; i < N; i++) {
konto.wyplata(ZMIANA);
}
});
try {
wplacacz.start();
wyplacacz.start();
wplacacz.join();
wyplacacz.join();
System.out.println("wątki się zakończyły");
} catch (InterruptedException e) {
System.err.println(e);
}
System.out.println(konto);
}
}
package na_zywo.watki.konto_v1;
public class Program2 {
public static void main(String[] args) {
Konto konto = new Konto(1, "Ala", 6300);
System.out.println(konto);
Thread wplacacz = new Thread(() -> {
while(true) {
konto.wplata(10_000);
System.out.println("Po wpłacie " + konto.getSaldo());
try {
Thread.sleep(10_000);
} catch (InterruptedException e) {
break;
}
}
});
Thread wyplacacz = new Thread(() -> {
while(true) {
try {
konto.wyplata(600);
System.out.println("Po wydatku " + konto.getSaldo());
} catch(RuntimeException e) {
System.err.println(e.getMessage());
}
try {
Thread.sleep(400);
} catch (InterruptedException e) {
break;
}
}
});
try {
wplacacz.start();
wyplacacz.start();
wplacacz.join();
wyplacacz.join();
System.out.println("wątki się zakończyły");
} catch (InterruptedException e) {
System.err.println(e);
}
System.out.println(konto);
}
}
package na_zywo.watki.konto_v2;
public class Konto {
private final int numer;
private String wlasciciel;
private int saldo;
public Konto(int numer, String wlasciciel, int saldo) {
this.numer = numer;
this.wlasciciel = wlasciciel;
this.saldo = saldo;
}
public int getNumer() {
return numer;
}
public String getWlasciciel() {
return wlasciciel;
}
public int getSaldo() {
return saldo;
}
public synchronized void wplata(int kwota) {
if(kwota <= 0) {
throw new IllegalArgumentException("kwota wpłaty nie jest dodatnia");
}
saldo += kwota;
notify();
}
public synchronized void wyplataBezCzekania(int kwota) {
if(kwota <= 0) {
throw new IllegalArgumentException("kwota wypłaty nie jest dodatnia");
}
if(kwota > saldo) {
throw new RuntimeException("Brak środków na koncie nr " + numer + ", potrzeba " + kwota + " a jest " + saldo);
}
saldo -= kwota;
}
public synchronized void wyplata(int kwota) {
if(kwota <= 0) {
throw new IllegalArgumentException("kwota wypłaty nie jest dodatnia");
}
try {
while(kwota > saldo) {
wait();
}
saldo -= kwota;
notify();
} catch (InterruptedException e) {
}
}
@Override
public String toString() {
return "Konto{" +
"numer=" + numer +
", wlasciciel='" + wlasciciel + '\'' +
", saldo=" + saldo +
'}';
}
}
package na_zywo.watki.konto_v2;
public class Program1 {
public static void main(String[] args) {
final int ZMIANA = 10;
final int N = 100_000;
Konto konto = new Konto(1, "Ala", ZMIANA*N);
System.out.println(konto);
Thread wplacacz = new Thread(() -> {
for(int i = 0; i < N; i++) {
konto.wplata(ZMIANA);
}
});
Thread wyplacacz = new Thread(() -> {
for(int i = 0; i < N; i++) {
konto.wyplata(ZMIANA);
}
});
try {
wplacacz.start();
wyplacacz.start();
wplacacz.join();
wyplacacz.join();
System.out.println("wątki się zakończyły");
} catch (InterruptedException e) {
System.err.println(e);
}
System.out.println(konto);
}
}
package na_zywo.watki.konto_v2;
public class Program2 {
public static void main(String[] args) {
Konto konto = new Konto(1, "Ala", 6300);
System.out.println(konto);
Thread wplacacz = new Thread(() -> {
while(true) {
konto.wplata(10_000);
System.out.println("Po wpłacie " + konto.getSaldo());
try {
Thread.sleep(10_000);
} catch (InterruptedException e) {
break;
}
}
});
Thread wyplacacz = new Thread(() -> {
while(true) {
try {
konto.wyplata(600);
System.out.println("Po wydatku " + konto.getSaldo());
} catch(RuntimeException e) {
System.err.println(e.getMessage());
}
try {
Thread.sleep(400);
} catch (InterruptedException e) {
break;
}
}
});
try {
wplacacz.start();
wyplacacz.start();
wplacacz.join();
wyplacacz.join();
System.out.println("wątki się zakończyły");
} catch (InterruptedException e) {
System.err.println(e);
}
System.out.println(konto);
}
}
package na_zywo.watki.poczatek;
public class Watki1 {
static final int N = 1000;
public static void main(String[] args) {
System.out.println("Początek main");
Thread watekA = new Thread(() -> {
System.out.println("AAA początek");
for(int i = 1; i <= N; i++) {
System.out.println("AAA " + i);
}
System.out.println("AAA koniec");
});
Thread watekB = new Thread(() -> {
System.out.println("BBB początek");
for(int i = 1; i <= N; i++) {
System.out.println("BBB " + i);
}
System.out.println("BBB koniec");
});
System.out.println("watekA: " + watekA);
System.out.println("watekB: " + watekB);
// watekA.setDaemon(true);
// watekB.setDaemon(true);
watekA.start();
watekB.start();
System.out.println("Koniec main");
}
}
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