Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Nun zu meiner Frage. Der erste Thread (northGerman) startet...und kommt in die run() Methode. Dort ist aber eine Endlosschleife while(true). Wie startet nun der zweite Thread (southGerman)?? Ich dachte, der zweite Thread startet wenn der erste beendet ist. Dieser kommt aber nie aus der Schleife raus....folglich wird er nicht beendet...wei funktioniert das ???
die start() Methode eines Thread blockiert nicht. Es wird ja ein neuer Thread erstellt und gestartet.
Der andere Thread, also der Main-Thread läuft ganz normal weiter, es sei denn, du machst ein join() auf den neuen Thread.
Dir ist aber schon klar, was Threads sind und für was sie verwendet werden, oder?
hehe gut gekontert...
@gast
Die Sache ist die,
der main Thread startet und kommt an die Anweisung x.start(), es wird ein neuer Thread (zusätzlich zum mainthread) aufgerufen der auch sofort loslegt. Dieser Thread stoppt irgendwann (Auch bei Endlosschleifen), weil ihm die CPU keine Rechenzeit mehr gibt. Dann läuft ein anderer Thread weiter. Das ist pseudoparallelität, weil das zum Einen sehr schnell geht (und somit sehr parallel aussieht), zum anderen aber so erstmal unkontrollierbar ist. Man kann nicht vorhersagen, wann welcher Thread läuft und wann wlecher stoppt.
Um das zu kontrollieren gibt es verschieden sprachliche Hilfsmittel in Java. synchronized, wait und notify bzw notifyall.... Ausserdem natürlich diverse Strukturideen wie Semaphoren o.ä
Das stimmt so auch nicht. Bei Thread.sleep(500) gibt der Thread in der Tat die Kontrolle ab, allerdings kann das OS einen Thread auch jederzeit unterbrechen. Und das tut ein OS für gewöhnlich auch laufend. Wann das OS den Thread unterbricht kann man dabei wirklich nicht wissen. Das hängt u.A. vom Scheduler und dessen Implementierung, von der Anzahl der 'parallel' laufenden Threads, usw. ab.
Das stimmt so auch nicht. Bei Thread.sleep(500) gibt der Thread in der Tat die Kontrolle ab, allerdings kann das OS einen Thread auch jederzeit unterbrechen. Und das tut ein OS für gewöhnlich auch laufend. Wann das OS den Thread unterbricht kann man dabei wirklich nicht wissen. Das hängt u.A. vom Scheduler und dessen Implementierung, von der Anzahl der 'parallel' laufenden Threads, usw. ab.
Die Theorie ist mir durchaus geläufig. Aber hier wurde eine konkrete Frage gestellt und auf die habe ich mich bezogen. Jeder Scheduler wird in der Praxis beim Thread.sleep() die Kontrolle abgeben.
Was wäre nun, wenn es diese slepp() Methode nicht geben würde? Würde der zweite Thread dann irgendwann loslaufen, unkontrolliert...also z.B. beim 10 Schleifendurchlauf???
Dann kannst Du es kaum voraussagen. Es könnte jedes mal anders sein, vielleicht aber auch 99mal so und dann auf einmal ganz anders. Statt sleep könntest Du auch yield() machen, aber das ist auch nur ein Hint an den Scheduler.
In der Praxis ist sleep schon ein ziemlich guter Garant dafür, dass ein anderer Thread an die Reihe kommt.
Hallo,
ich hätte auch eine Frage zu Threads. Gibt es auch Threads ohne Methode run() bzw. muss diese vorhanden sein???? Wenn ich einen Thread mit z.B. t.start() starte arbeitet dieser die Methode run() ab,was ist aber wenn diese nicht vorhanden ist? Oder habe ich irgendwas falsch verstanden????
um eine Klasse threadable zu machen mußt du das Interface Runnable implementieren oder die Klasse Thread erweitern, also "implements Runnable" oder "extends Thread". Dabei bist du gezwungen die MEthode run() zu implementieren. Du kannst praktisch nicht anders, die Methode ist vorgeschrieben.