Threads Fortgeschrittenes Threading Auktion

hanshans123123

Neues Mitglied
Ich kann ganz gut in Java programmieren, habe aber noch nie Threads verwendet und komme deshalb nicht weiter, es wäre sehr nett, wenn mir jemand weiterhelfen könnte.


Bei Ebay-Auktionen werden Angebote unter verschiedenen Käufern ersteigert. Auktionen haben eine zu Beginn festgelegte konstante Gesamtlaufzeit und starten bei einem Mindestpreis von 0 Euro. Jeder Käufer kann bei einer Auktion mitbieten, indem er ein Maximalgebot abgibt. Dieses Maximalgebot muß das aktuelle Gebot für diese Auktion um mindestens 1 Euro übersteigen, und die Auktion darf noch nicht beendet sein. Maximalgebote werden in ganzen Eurobeträgen abgegeben.
Der Käufer, der das erste Maximalgebot abgibt, wird automatisch zum vorläufigen Gewinner der Auktion mit dem aktuellen Gebot 1 Euro. Sobald ein neues Maximalgebot abgegeben wird, wird der vorläufige Gewinner der Auktion neu bestimmt. Der bisherige Gewinner der Auktion wird zum neuen vorläufigen Gewinner, sofern das neu eingetroffene Gebot sein Maximalgebot nicht übertrifft. Bei Gleichstand der Maximalgebote entspricht das neue aktuelle Gebot für diese Auktion genau dem Maximalgebot der beiden Teilnehmer. In allen anderen Fällen ist das aktuelle Gebot um einen Euro höher als das Minimum der beiden Maximalgebote.

Beispiel: Es wird eine neue Auktion der Dauer 5 Minuten gestartet. Käufer A nimmt an dieser Auktion mit einem Maximalgebot von 5 Euro teil. Damit wird er zum vorläufigen Gewinner dieser Auktion bei einem aktuellen Gebot von 1 Euro. Nun steigt auch Käufer B mit einem Maximalgebot von 3 Euro in die Auktion ein. Der neue vorläufige Gewinner bleibt Käufer A, allerdings steigt das aktuelle Gebot auf 4 Euro.
Nun gibt Käufer C ein Maximalgebot von 5 Euro ab. Käufer A bleibt weiterhin der vorläufige Gewinner und das aktuelle Gebot steigt auf 5 Euro. Dann gibt Käufer D ein Maximalgebot von 7 Euro ab. Dadurch wird D zum vorläufigen Gewinner bei einem aktuellen Gebot von 6 Euro.
Falls kein Käufer ein weiteres Maximalgebot abgibt, bekommt Käufer D nach dem Ende der Auktion (Ablauf der 5 Minuten) den Zuschlag mit 6 Euro Kaufpreis.

Implementieren Sie ein Java-Programm, das solche Auktionen simuliert. Statten sie Ihre Methoden mit entsprechenden textuellen Ausgaben aus, so dass die auftretenden Ereignisse nach- vollzogen werden können.


(a) Implementieren Sie die Klasse Auktion als Thread, die bei eintreffenden Maximalgeboten das aktuelle Gebot, sowie den vorläufigen Gewinner neu bestimmt. Die Laufzeit des Threads entspricht dabei der Dauer der Auktion. Schreiben Sie dazu

i) die Methode biete, die Käufern das Abgeben eines Maximalgebotes ermöglicht. Diese Methode terminiert mit dem Rückgabewert false, sofern das Gebot über- boten wurde, oder die Anforderungen an ein gültiges Gebot nicht erfüllt sind. Solange die Auktion läuft und der Käufer mit diesem Gebot vorläufiger Gewinner ist, blockiert diese Methode bis entweder die Auktion abgelaufen ist, oder der Käufer überboten wird. Sollte der Käufer die Auktion endgültig gewinnen, so liefert biete den Wert true zurück.

ii) die Methode getGewinner, die bei Bedarf auf das Ende der Auktion wartet, und den Gewinner der Auktion zurückliefert.

iii) die Methode getKaufpreis, die bei Bedarf auf das Ende der Auktion wartet, und den endgültigen Kaufpreis der Auktion zurückgibt.

iv) die Methode getAktuellesGebot, die das aktuelle Gebot dieser Auktion zum Zeitpunkt der Anfrage ermittelt.
Vorsicht: Achten Sie darauf, dass diese Vorgänge Thread-sicher sind! überlegen Sie sich, was passieren kann, wenn zwei Angebote gleichzeitig akzeptiert werden oder zwei Käufer gleichzeitig als Gewinner ermittelt werden. Argumentieren Sie als Kommentar am Ende der Klasse Auktion, was das potentielle Problem ist, und wie Ihre Lösung das Problem umschifften kann.

(b) Implementieren Sie die Klasse Kaeufer, die ein Gebot absetzt und das Ergebnis des Gebots ausgibt.

(c) Schreiben Sie die Klasse TestRahmen, die die Auktion aus dem Beispiel nachstellt.
 

VfL_Freak

Top Contributor
Moin,

hanshans123123 hat gesagt.:
Ich habe leider noch keinen wirklichen Ansatz, das ist ja das Problem

hmm, ich dachte
hanshans1006108 hat gesagt.:
Ich kann ganz gut in Java programmieren

Dann sollte es doch machbar sein, Dich erstmal (bspw. mit dem obigen Link) ein bisschen in das Thema einzuarbeiten ...

Oder liegt es nicht nur am Thema "Threads" ?? :noe:

Wie gesagt, Du wirst hier sicherlich keine fertigen Code bekommen!
Erstens hast Du dann keinen Lerneffekt und zweitens wäre das bei so einer doch recht umfangreichen Aufgabe sicherlich zu viel erwartet!

Versuch' mal das Grundgerüst zu erstellen und stell dann konkrete Fragen dazu, dann wird Dir hier sicher gerne geholfen !

Gruß
Klaus
 

Steve001

Neues Mitglied
Hey,

ich bin mir bei der Programmierung von Threads noch echt unsicher, habe mir aber schon ein paar Gedanken zu der Auktion gemacht. Kann mir jemand sagen, ob das so richtig ist:

Die Auktion soll ja als Thread implementiert werden. Dieser Thread soll eine gewisse Laufzeit haben (was dann die Laufzeit der Auktion darstellt). Kann ich diese Laufzeit einfach mit einem Aufruf von

sleep(laufzeit);

in der run-Methode von Auktion machen?

Also wenn ich das so mache, und die Auktion in den waiting Zustand übergeht, kann ich doch nicht mehr die Methode biete(), welche auch in der Klasse Auktion enthalten sein soll aufrufen
(was bedeuten würde, dass ich einen anderen Ansatz für die Implemntierung der Laufzeit suchen muss)?
 

DunKing

Mitglied
Diese Aufgabe würde mich auch ziemlich interessieren, da ich eine Niete in Sachen Threads bin.
Ich versuch da mal irgeneinen Ansatz zu finden :)
 

Oben