Hallo zusammen,
Ich sitze gerade an einer Programmieraufgabe und bin mir bei der Realisierung eines Timers unsicher.
Aufgabenstellung:
Folgende Lösungsansätze sind mir dazu eingefallen:
Meine Erfahrung mit Timern geht gegen Null. Deshalb meine Frage: Was für ein Lösungsansatz bietet sich an, gibt es vielleicht noch andere Herangehensweisen?
Viele Dank
eL
Ich sitze gerade an einer Programmieraufgabe und bin mir bei der Realisierung eines Timers unsicher.
Aufgabenstellung:
Gegeben sei ein Ringpuffer, […] besitzt die Methoden put und get, um einen Wert im Puffer abzulegen bzw. aus dem Puffer auszulesen. put und get können von verschiedenen Threads aufgerufen werden. Der Zugriff auf den gemeinsamen Puffer ist ein kritischer Bereich. […] Schreiben Sie ein Testprogramm, mit 3 Erzeuger‐ und 2 Verbraucher‐Threads, die unterschiedlich schnell sind. Die Erzeuger‐Threads schreiben Zufallszahlen […] die Verbraucher‐ Threads holen Werte aus dem Puffer und geben sie auf dem Bildschirm aus. Das Programm soll nach einer vorgegebenen Zeit terminieren. Dazu benötigen Sie einen Timer‐Thread. Sobald die Laufzeit – in Minuten – eingestellt ist, läuft die Zeit quasi rückwärts. Nach Ablauf der Zeit müssen die noch aktiven Erzeuger‐ und Verbraucher‐Threads sicher beendet werden.
Folgende Lösungsansätze sind mir dazu eingefallen:
- Man startet einfach einen Thread, lässt ihn die angegebene Zeit "schlafen" und wartet im Hauptprogramm bis er fertig ist um anschließend alle Erzeuger und Verbraucher zu unterbrechen.
- Man könnte aber auch einem Timer-Thread starten. Ihm den Auftrag geben nach der angegeben Zeit ein TimerTask auszuführen, in dem alle Threads unterbrochen werden. Der Klasse InterruptThreads (extends TimerTask) könnte man im Konstruktor die zu unterbrechenden Threads als Array übergeben. (Um es flexibel zu gestalten.)
Meine Erfahrung mit Timern geht gegen Null. Deshalb meine Frage: Was für ein Lösungsansatz bietet sich an, gibt es vielleicht noch andere Herangehensweisen?
Viele Dank
eL