# Thread neustarten



## Illuvatar (10. Jun 2004)

Wenn der Thread schon einmal gestartet wurde, wirft die Methode Thread#start ja eine IllegalThreadStateException. Da in meinem Programm immer wieder die gleichen Threads gestartet werden, ist es recht unperformant, wenn ich jedesmal neue Thread-Objekte erstelle. Gibt es eine Möglichkeit, wie ich den Thread (wenn er sowieso bereits wieder beendet ist) neustarten kann?


----------



## Donut (10. Jun 2004)

```
if(Thread.isInterrupted()){Thread.start();}
```


----------



## Illuvatar (10. Jun 2004)

Ich weiß, dass die run-Methode schon returned ist, will den Thread aber wieder über start() starten.


----------



## Donut (10. Jun 2004)

wie jetzt?
du weißt, dass der Thread nich mehr läuft und willst ihn nur neu starten?
Thread.start(); ....
ich glaub ich verstehe dein Problem nicht.


----------



## Beni (10. Jun 2004)

Also wenn ich mich richtig erinnere, kann ein Thread nur einmal benutzt werden.

Aber Du könntest eine Klasse schreiben, die das Problem "versteckt":


```
public class MyThread{
  private Runnable run;
  private Thread thread;

  public void start(){
    if( thread == null || ! thread.isAlive() ){
      thread = new Thread( run );
      thread.start();
    }
    else
      throw new Exception( "Sorry, thread is still runing" );
  }
}
```


----------



## Illuvatar (10. Jun 2004)

Du hast mich schon verstanden, allerdings wird auf diese Weise eine IllegalThreadStateException geworfen.

Aber es hat sich wohl erledigt, in der 1.5-API steht es noch genauer:


			
				API hat gesagt.:
			
		

> public void start()
> [...]
> It is never legal to start a thread more than once. In particular, a thread may not be restarted once it has completed execution.
> 
> ...




Edit: @Beni: Läuft ziemlich auf das raus, was ich eh schon mach. Ich wollte verhindern, weil mein Programm nach einiger Zeit immer mit einem OutOfMemoryError beendet, neue Objekte zu erstellen.
Ich werd die Sache jetzt anders lösen.


----------



## L-ectron-X (10. Jun 2004)

Kannst Du nicht, nach dem die Objekte "verbraucht" sind, vom Interpreter eine Garbage Collection anfordern?


----------



## Illuvatar (10. Jun 2004)

Kann ich schon, wird dann allerdings dank ruckeln unspielbar  

Ich machs jetzt ganz simpel so:

```
for (TimerListener tl : tmrLstnrs)
      tl.nextStop (halftime);
```


----------



## L-ectron-X (10. Jun 2004)

So 'ne for-Schleife habe ich noch nie gesehen. Weihst Du mich mal ein?


----------



## Beni (10. Jun 2004)

Ich würde mal Java 1.5 tippen.


----------



## Roar (10. Jun 2004)

L-ectron-X hat gesagt.:
			
		

> So 'ne for-Schleife habe ich noch nie gesehen. Weihst Du mich mal ein?



dat gibts ab 1.5 

edit: arg, der schon wieder  :bae:


----------



## Reality (10. Jun 2004)

In deinem Fall würde nen Thread nicht unterbrechen.
Nimm wait() und boolean. Wenn z.B. boolean test== false ist, dann soll er warten.

Liebe Grüße
Reality


----------

