PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : thread-syncronisierung java


ethrandil
2002-11-10, 22:29:32
Hallo,
Kennt jemand von euch das programme 'java-hamster'?
nungut, es stellt einen hamster in einem Feld dar.
man kann programme schreiben, die diesen Hamster steuern.

Nun: ich möchte das programm so umschreiben, dass es 2 Hamster hat!!!
Ich bin (fast) fertig, aber:
Wie bekomme ich es hin, dass der Hamster gleichzeitig ihre Aktionen ausführen???
thread_ham1 = new Thread(Thread.currentThread().getThreadGroup(), hamster[0]);
thread_ham1.start();
thread_ham2 = new Thread(Thread.currentThread().getThreadGroup(), hamster[1]);
thread_ham2.start();
while(thread_ham1!=null&&thread_ham2!=null){
;
}
Dieser Code creiert die Hamster-objekte und startet sie. ich möchte nun, dass beide Threads bei den Funktionen 'vor(), linksUm(), nimm(), gib()' aufeinander 'warten'.
Wie kann ich das realisieren?

ethrandil
2002-11-10, 23:15:24
nun, es ist etwas anders, wie mir nach längerem nachdenken auffiel:
Die Threads müssen Abwechselnd rechnen!!! Immer am Ende der oben genannten funktionen müssen sie den anderen Thread rechnen lassen!
Aber so funzt das nicht:
public void naechster(int i){
if(i==0){
System.out.print("suspend 1, resume 2");
thread_ham2.resume();System.out.print("resumeed 2");
thread_ham1.suspend();System.out.print("suspended 1");
}
if(i==1){
System.out.print("suspend 2, resume 1");
thread_ham1.resume();System.out.print("resumeed 1");
thread_ham2.suspend();System.out.print("suspended 2");
}
}
Die Ausgabe lautet: "suspend 1, resume 2resumeed 2"
dH das Programm hält beim 'suspenden' des 2. Threads.
Warum?
Wie soll ich das alternativ machen?
mfg Ethrandil

Marcel
2002-11-10, 23:30:02
Ich hab in der entsprechenden Betriebssysteme-Vorlesung letzte Woche nur halb zugehört, aber vielleicht ist Thread.join ja der Schlüssel zu Deinem Glück?

Gruß,
Marcel

ethrandil
2002-11-10, 23:55:37
Originally posted by Marcel
Ich hab in der entsprechenden Betriebssysteme-Vorlesung letzte Woche nur halb zugehört, aber vielleicht ist Thread.join ja der Schlüssel zu Deinem Glück?

Gruß,
Marcel
Hmm... ich hab mal von join gelesen ... ;) (nur im API)
Das wartet doch, bis die threads beendet sind, nicht?
Die beiden Threads sollen allerdings gestartet sein, nur an den entsprechenden Funktionen warten, bis der andere Thread soweit ist, usw...
(bis beide Threads fertig sind.)

ethrandil
2002-11-11, 00:08:59
Hmm...
Thread.yield() funktioniert :)
cool!!
mfg Ethrandil
*jetzt endlich für die schule lernt*