Max: einen Thread zweimal starten

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

  1. 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

    1. 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