wie warte ich auf ein bestimmtes Ereignis

Status
Nicht offen für weitere Antworten.
M

mdsnake

Gast
Hallo Leute,

mich würde interessieren wie ich auf bestimmte Ereignisse warten kann. Meine Situation ist folgende:
Ich habe eine Klasse Parameterstudie, die Daten erstellt, mit denen externe Programme gestartet werden sollen. Diese Daten gibt sie einer Klasse JobVerarbeitung, die damit ein externes Programm startet. Zusätzlich überwacht die JobVerwaltung noch mit einem TimerTask ob die gestarteten Programme fertig berechnet sind. Wenn ein Job fertig ist soll die Instanz der Klasse Parameterstudie informiert werden, dass der von ihr in Auftrag gegebene Job fertig ist und sie damit beginnen kann die ErgebnisFiles auszulesen und so weiter. Wie mache ich es, dass die Parameterstudie wartet bis ihr die JobVerarbeitung sagt, Job ist fertig -> mach was??

mfg mdsnake
 

L-ectron-X

Gesperrter Benutzer
Mit Threads und mit Referenzen.
Beide Klassen müssen sich über Referenzen bekannt machen, d.h., sie müssen jeweils eine Instanz vom anderen Programm halten. Wenn das eine Teilprogramm (Thread) fertig ist, schickt es dem anderen Programmfaden über die Referenz eine Nachricht (Methode aufrufen), dass die Arbeiten beendet sind.
Das gleiche Prinzip benutzt dieses Programm: http://www.java-forum.org/de/viewtopic.php?p=140947#140947
 
M

mdsnake

Gast
Ok, dass geht natürlich prinzipiell so. Ich möchte aber nicht für jeden Job, den eine Instanz von Parameterstudie ausgeführt haben möchte, ne extra JobVerwaltung starten, sondern eine zentrale (statische) JobVerwaltung über die alle Jobs gestartet werden etc. Das Problem ist nämlich, dass die Jobs auf einem Cluster gestartet werden. Die Jobverwaltung soll über den TimerTask aller meinetwegen 2 sek, den Status aller laufenden Jobs erfragen. Mache ich für jeden Job nen extra Thread und frage jeweils nur seinen Zustand ab, dann bombadiere ich den Clusterkopfrechner ständig mit Anfragen -> Performanceproblem. Ich würde halt gerne im Code der Parameterstudie auf ne Art 'JobistfertigEvent' warten und dann weitermachen. Ich hoffe ich konnte mein Problem halbwegs rüberbringen... Geht sowas irgendwie??

mdsnake
 
G

gast

Gast
Falls du mit Thread arbeitest, könntest du wait/notify einsetzen. Nur mal als Denkanreiz.
 
M

mdsnake

Gast
Danke für Denkansetze. So wie ich das jetzt sehe ist das nen klares Producer/Consumer Problem. Das heißt, die Parameterstudie muss als Thread laufen, sich einschläfern und von der JobVerarbeitung wieder geweckt werden, wenn auswertbare Ergebnisse vorliegen. Ich schau mir grad mal die Condition-Geschichte an. Mit der müßte das eigentlich zu machen sein...

Danke euch....
mdsnake
 

TheJavaKid

Top Contributor
Edit: Sry hab überlesen, dass das Thema schon gelöst wurde! Hier trotzdem mal code für verzögerung:

Code:
try {
    Thread.sleep(2000); //Millisekunden eintragen
    // Ereignis eintragen
} catch(Exception e) {
    System.err.println("Fehler!");
}
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben