Threads in Java

Ich versuche mich gerade in das Arbeiten mit Threads in Java einzuarbeiten und habe ein kleines Verständlichkeitsproblem. Angenommen man hat einen Code wie diesen:

Code:
 .....
// some code
 .....
 new Thread(
	new Runnable() {
		 public void run() {
			 try {
				while(true){
                                      //some code          
                             }
                    }
            }
).start
....
//some code
....
new Thread(
	new Runnable() {
		 public void run() {
			 try {
				while(true){
                                      //some code
                             }
                    }
            }
).start
....
//some code
....

In meinem Buch steht nun in diesem Programm würden immer mindestens 2 Threads ausgeführt. Aber müssten es nicht eigentlich 3 sein? Also die 2 die ich mit new Thread() starte und dann eben noch einer der den restlichen Code in der klasse abarbeitet.
 
Ja, aber auch wenn deine Main-Funktion terminiert, laufen die beiden erzeugten Threads immer noch weiter. Dann hast du zwei aktive Threads.
Überlicherweise führt man aber ein Abbruchkriterium in die Thread-Schleifen ein, das man von außen aktivieren kann (z.B. eine lokale Variable im Thread), da die Java-Entwickler das "Abschießen" einen Thread von außen nicht wirklich wollten (geht zwar, ist aber deprecated).
In GUI-Klassen macht man das oft so. Die Main-Methode fährt das Swing-Toolkit hoch, lädt ein Fenster und terminiert dann, wärend die GUI-Threads im Hintergrund weiter das Fenster rendern, bis es geschlossen wird.

mfg, metax.
 
Original von metax.
Ja, aber auch wenn deine Main-Funktion terminiert, laufen die beiden erzeugten Threads immer noch weiter. Dann hast du zwei aktive Threads.
D.h. also bis die Main terminiert habe ich 3 Threads und danach noch die beiden die explizit erzeugt wurden?
Würde ich als in der main eine while(true) Schleife einbauen und innerhalb der Schleife keine Aktionen setzen die diese beenden hätte ich 3 Threads auf ewig laufen. Sehe ich das richtig?
 
Sicher, warum auch nicht?
Jeder Thread läuft ab dem Zeitpunkt, zu dem du ihn startest (Main() wird implizit durch die Runtime gestartet) bis seine run()-Methode terminiert oder er gewaltsam abgewürgt wird.
Achtung: Wenn du mit System.exit() die Runtime beendest, sterben alle darin laufenden Threads ebenfalls (daher sollte man das nach Möglichkeit nicht machen).

mfg, metax.
 
Zurück
Oben