# Thread starten / stoppen / neustarten



## Pacman92 (11. Okt 2010)

Hallo,

ich habe ein Programm mit 2 Threads und will diese Stoppen und wieder starten. Beide Threads sind eine eigene Klasse welche von der Klasse Thread erbt. Wenn ich jetzt diesen Thread starte mit thread.start() und auch wieder beende mit writethread.interrupt(); funktioniert alles.

Wenn ich aber den Thread neustarten will mit .start haut dieser mir eine Exception raus. Anbei der Code eines Threads:


```
public void run()
	{
		while(!isInterrupted())
        {
			writer.println("digitemp -a -q -o\"Temp-%s-%.2C\"");
            writer.flush();
            try {
				Thread.sleep(delay);
			} catch (InterruptedException e) {interrupt();}
        }
		System.out.println("raus write");
	}
```

Schonmal danke für eure Hilfe


----------



## Atze (11. Okt 2010)

ein thread kann nur einmal starten. wenn er einmal "dead" ist, musst du einen neuen erzeugen. du kannst ihn höchstens warten und wieder laufen lassen.

Thread State


----------



## Pacman92 (11. Okt 2010)

Das heist ich müsste die Klasse neu initialisieren als Thread blabal = new Thread(); ?


----------



## Volvagia (11. Okt 2010)

Condition (Java 2 Platform SE 5.0)


----------



## VfL_Freak (11. Okt 2010)

Moin,

ich benutze nur noch die foxtrot-LIB :
Foxtrot - Easy API for JFC/Swing

Damit kannst Du Threads beliebig starten, stoppen und auch restarten !

Gruß
Klaus


----------



## Michael... (11. Okt 2010)

Pacman92 hat gesagt.:


> Das heist ich müsste die Klasse neu initialisieren als Thread blabal = new Thread(); ?


Entweder das, oder wenn man tatsächlich einen existierenden Thread fortsetzen will/muss kann man diesen auch schlafen legen und bei Bedarf wieder aufwecken - per wait/notify an einem gemeinsamen Objekt.


----------



## FArt (11. Okt 2010)

VfL_Freak hat gesagt.:


> Moin,
> 
> ich benutze nur noch die foxtrot-LIB :
> Foxtrot - Easy API for JFC/Swing
> ...



Foxtrot adressiert doch eine ganz andere Problematik. Wie kann man da einen Thread mehrfach starten? So weit ich weiß arbeiten die mit "Workern" und "Tasks" ... also im Prinzip mit Runnable... und das wäre für den TS wohl die Lösung... man kann eine Runnable-Instanz mehrfach von verschiednen Thread-Instanzen ausführen lassen, ohne eine fremde API einbinden zu müssen.


----------



## VfL_Freak (11. Okt 2010)

Moin,



FArt hat gesagt.:


> Foxtrot adressiert doch eine ganz andere Problematik. Wie kann man da einen Thread mehrfach starten?
> 
> So weit ich weiß arbeiten die mit "Workern" und "Tasks" ... also im Prinzip mit Runnable... und das wäre für den TS wohl die Lösung... man kann eine Runnable-Instanz mehrfach von verschiednen Thread-Instanzen ausführen lassen, ohne eine fremde API einbinden zu müssen



wieso _mehrfach starten_ ???:L

So wie ich es verstehe, will er doch nur *Starten - Anhalten - weiter laufen lassen*, oder ? :autsch:

Gruß
Klaus


----------



## Volvagia (11. Okt 2010)

Über den Executor, dem man eh verwenden sollte, kann man beliebig viele starten, da er bloß eine Runnable braucht. Eigendlich auch bei Thread. Anhalten/Weiterlaufen lassen kann man ganz einfach per Conditions.


----------

