Buchungssystem implementieren

laprin__

Neues Mitglied
Hallo, ich soll ein Buchungssystem in Java auf Nebenläufigkeit erweitern und komme dabei leider nicht voran. Das Buchungssystem an sich habe ich bereits implementiert, als Kurzfassung: Ich habe eine Queue implementiert, in der random generierte Buchungssätze gespeichert werden. ich soll jetzt mehrere Threads erstellen, die die Buchungssätze aus der Queue entnehmen, prüfen und anschließend, wenn die Buchungssätze richtig sind, verbuchen sollen. Ein Thread darf einen Buchungssatz jedoch nicht verbuchen, wenn dieser Buchungssatz ein Konto enthält, das gerade von einem anderen Thread verändert wird. Die Methoden zum Prüfen der Richtigkeit habe ich auch bereits implementiert. Sprich es fehlt nur noch das Einbauen der Nebenläufigkeit. Ich weiss jedoch überhaupt nicht, wo ich die synchronize Blöcke einbauen soll 🙁 Ich wäre dankbar über jeden Tipp!
 
Also spontan haette ich gesagt du synchronisierst einfach auf das Konto welches zu gerade aendern willst.

Java:
synchronized (account) {
    if (account got enough money) {
        withdraw all the money
    }
}

Wenn man es etwas genauer haben will, kann man jedem Konto auch ein eigenes Objekt verpassen auf welches gesperrt wird:

Java:
synchronized (account.getLockObject()) {
    if (account got enough money) {
        withdraw all the money
    }
}

Und wenn man ganz uebel werden will, verwaltet man sich intern eine Sperre:

Java:
account.lock();

if (account got enough money) {
    withdraw all the money
}

account.release();

Das letztere klingt aber nach einigen Kopfschmerzen.

Und wo wir schonmal bei Multi-Threading sind, zahlt es sich immer aus auf The Deadlock Empire zu verweisen als herovrragende Einfuehrung in die Problematik.
 
Das Problem wird aber vermutlich auch sein, dass Du mindestens 2 Konten haben wirst. Und dann kann folgendes passieren:

Buchung 1 hat Konto A und B
Buchung 2 hat Konto B und A
Beide wollen gleichzeitig verarbeitet werden:
Buchung1 blockt Konto A
Buchung2 blockt Konto B
Buchung1 will dann noch Konto B, ist aber derzeit geblockt, also wartet es, dass es frei wird.
Buchung2 will noch Konto A und wartet, dass es frei wird

==> Deadlock.

Aber das sind dann bestimmt Dinge, die in Unterricht oder Vorlesung behandelt wurden. 🙂
 

Zurück
Oben