package UE19_220425_Threads1.nothread;

public class Main {
    public static void main(String[] args) {
        Konto a = new Konto();
        Konto b = new Konto();
        Konto c = new Konto();
        Ueberweiser ab = new Ueberweiser(a, b);
        Ueberweiser bc = new Ueberweiser(b, c);
        Ueberweiser ca = new Ueberweiser(c, a);

        long start = System.currentTimeMillis();
        ab.run();
        bc.run();
        ca.run();
        System.out.println(System.currentTimeMillis() - start + "ms");

        System.out.println("A: " + a.getKontostand());
        System.out.println("B: " + b.getKontostand());
        System.out.println("C: " + c.getKontostand());
    }
}
// 81ms

class Konto {
    private int kontostand;

    public Konto() {
        this.kontostand = 0;
    }

    public int getKontostand() {
        return kontostand;
    }

    public void setKontostand(int kontostand) {
        this.kontostand = kontostand;
    }

    public void add(int betrag) {
        int wert = getKontostand();
        wert = wert + betrag;
        setKontostand(wert);
    }
}

class Ueberweiser {
    private static final int anzahl = 10_000_000;
    private static final int betrag = 10;
    private final Konto von;
    private final Konto nach;

    public Ueberweiser(Konto von, Konto nach) {
        this.von = von;
        this.nach = nach;
    }

    public void run() {
        for (int i = 0; i < anzahl; i++) {
            von.add(-betrag);
            nach.add(betrag);
        }
    }
}