Java:
class KontoSL {
private int kontostand;
private int summeBarEinzahlungen;
private int summeUeberweisungsEinzahlungen;
KontoSL() {
this.kontostand = 0;
this.summeBarEinzahlungen = 0;
this.summeUeberweisungsEinzahlungen = 0;
}
void barEinzahlen(int betrag) {
this.summeBarEinzahlungen = this.summeBarEinzahlungen + betrag;
// Problem: Thread-Wechsel hier
this.kontostand = this.kontostand + betrag;
}
int getProzentualeBarEinzahlungen() {
if (this.kontostand == 0) {
return 0;
}
return 100 * this.summeBarEinzahlungen / this.kontostand;
}
void perUeberweisung(int betrag) {
this.summeUeberweisungsEinzahlungen = this.summeUeberweisungsEinzahlungen + betrag;
this.kontostand = this.kontostand + betrag;
}
int getKontostand() {
return this.kontostand;
}
}
class Konto implements Runnable{
KontoSL sl;
private int betrag;
public Konto(KontoSL sl, int betrag) {
this.sl = sl;
this.betrag = betrag;
}
@Override
public void run() {
int kontostand = 0;
kontostand += betrag;
sl.barEinzahlen(kontostand);
}
public static void main(String[] args) throws InterruptedException {
KontoSL sl = new KontoSL();
Thread thread = new Thread(new Konto(sl, 15));
Thread thread1 = new Thread(new Konto(sl, 25));
thread.start();
thread1.start();
thread.join();
thread1.join();
System.out.println(sl.getKontostand());
}
}
Moin,
kann jemand mich bitte aufklären, warum meine Code funktioniert?
Result ist immer 40, was korrekt ist.
Normalerweise ohne Semaphore oder Synchronisation sollte richtiges Ergebnis nicht rauskommen. Was mache ich hier falsch?