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.
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.