einen Thread zweimal starten
Max
- java
Hallo!
Ich habe folgendes Problem in Java: Ich habe eine Klasse, welche von der Klasse Thread erbt mit dem Namen ThreadEins. In meinem Programm soll der Thread immer wieder angestubst werden, wenn es gerade benötigt wird, also z.B. so:
Thread t1 = new ThreadEins();
t1.start();
// .... verschiedene Operationen
t1.start();
// .... Programm arbeitet normal weiter
Beim ersten start() wird mir noch was vom Thread ausgegeben, beim zweiten leider nicht mehr. Ich hab auch schon mittels t1.isAlive() überprüft, ob der Thread noch "am Leben" ist nach dem zweiten Start: ist er! Er lässt sich sogar noch mittels run() aufrufen, allerdings arbeitet er dann ja nicht im Hintergrund =(
Ich hoffe, dass Ihr mir weiterhelfen könnt! Danke schonmal im Voraus,
Max
Hallo,
Beim ersten start() wird mir noch was vom Thread ausgegeben, beim zweiten leider nicht mehr. Ich hab auch schon mittels t1.isAlive() überprüft, ob der Thread noch "am Leben" ist nach dem zweiten Start: ist er! Er lässt sich sogar noch mittels run() aufrufen, allerdings arbeitet er dann ja nicht im Hintergrund =(
Der direkte Aufruf von run() hat nichts zu sagen. Das geht immer.
Daß sich der Thread nicht ein zweites mal mit start() starten läßt,
_nachdem_ er beendet wurde, finde ich interessant. Das wußte ich
bisher auch nicht. Interessant ist auch, daß keine Exception geworfen
wird, wenn der Thread vorher beendet wurde.
Wenn man start() aufruft, während der Thread noch läuft, wird nämlich
eine geworfen.
Das JavaDoc zu java.lang.Thread sagt leider nichts zum mehrfachen
Aufruf von start(). Vielleicht sagt die Language Specification etwas
darüber aus. Guck doch mal dort nach. (Beim groben Drüberfliegen habe
ich jetzt nichts dazu gefunden.)
Die einzige Möglichkeit, die ich sehe, wäre jeweils ein neues Thread-
Objekte zu erzeugen.
Thread t1 = new ThreadEins();
t1.start();
// .... verschiedene Operationen
Thread t2 = new ThreadEins();
t2.start();
Aber vielleicht willst du das gar nicht...
Evtl. weiß auch noch jemand anderes hier im Forum näheres über das
mehrmalige Starten eines Threads.
Gruß
Slyh
Hallo Slyh!
Danke für deine Antwort, ich hab die Lösung des Rätsels gefunden =)
Und zwar lege ich erst einen Thread an mit
Thread t1 = new ThreadEins();
Für jeden Aufruf dieses Objekts erzeuge ich ein neues Objekt der Klasse Thread, sodass das ursprüngliche Objekt niemals direkt aufgerufen wird. Der Aufruf lautet:
Thread t = new Thread(t1);
t.start();
Somit werden Eigenschaften des Objekts auch immer mitgespeichert, wenn ich das Objekt "kopiere". Auf den Trichter bin ich gekommen, nachdem ich
http://java.sun.com/docs/books/tutorial/essential/threads/lifecycle.html
gelesen habe.
Vielleicht hilft es ja wenigstens in Zukunft anderen Leuten, die dasselbe Problem haben =)
Guts Nächtle,
Max