# Thread in Schleife wiederholen



## Pyto (1. Feb 2012)

Hallo,

ich frage mich wie ich einen Thread immer wieder wiederholen kann bis ich ihn unterbreche.
Habe es mal so versucht:


```
public class Schedule extends Thread {
	public Thread mThread;
	public long mDelay;
	public long mPeriod;
	
	public Schedule(Thread aThread, long aDelay, long aPeriod) {
		mThread = aThread;
		mDelay = aDelay;
		mPeriod = aPeriod;
	}
	
	public void run () {
		try {
			scheduleFixRate(mThread, mDelay, mPeriod);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

	public void scheduleFixRate(Thread aThread, long aDelay, long aPeriod) throws InterruptedException {
		Thread countDownThread = new CountDown(aDelay);

		System.out.println("Die Aufgaben werden in " + aDelay + " Sekunden ausgeführt:");
		countDownThread.start();
		countDownThread.join();
		aThread.start();
		aThread.join();

		while (!isInterrupted()) {
			Thread countDownThread2 = new CountDown(aPeriod);
			System.out.println("Die Aufgaben wiederholen sich in " + aPeriod + " Sekunden:");
			countDownThread2.start();
			countDownThread2.join();
			aThread.start();
			aThread.join();
		}
	}
}
```

Beim aThread.start(); in der while-Schleife bekomme ich allerdings folgenden Fehler:

Exception in thread "Thread-1" java.lang.IllegalThreadStateException

Wie kann man bzw. muss man sonst Threads gestalten wenn man sie mehrmals ablaufen lassen möchte?


----------



## asdasdasdasdsa (1. Feb 2012)

Hallo.

Du rufst ja mehrmals 
	
	
	
	





```
aThread.start();
```
 auf obwohl du kein neuen Thread erstellst. Und das führt zu dieser Exception. Du musst also ein neues Threadobjekt erzeugen. Zudem verwendest du join() nicht Artgerecht. 

Aber genauer wird es hier beschrieben.


----------



## HimBromBeere (1. Feb 2012)

Du startest immer den selben Thread. Entweder du beendest ihn auch mal mit Thread.stop() oder du erstellst eine neue Instanz der Klasse Thread.


----------



## Pyto (1. Feb 2012)

aThread der der Methode scheduleFixRate(Thread aThread, ....)
übergeben wird enthält allerdings wichtige Daten die ich in der while-
schleife nicht wieder neu übergeben kann. Es nützt mir also nichts wenn
ich den Thread mit aThread = new Thread(); neu initialisiere, da dieser 
dann nichts tun würde......

stop() Methode bewirkt garnichts bei mir.


----------



## Pyto (1. Feb 2012)

Und warum ich join() nicht Artgerecht behandle weiß ich auch nicht, im Java ist auch nur eine Insel beispiel wird es so wie bei mir benutzt....


----------



## HimBromBeere (1. Feb 2012)

Dann nimm doch einfach 
	
	
	
	





```
aThread = new Thread(aThread);
```
damit kopierst du den Thread einfach...
auch wenn ich das irgendwie unheimlich finde... schließlich erstellst du auf die Art und Weise mal schnell ein paar hundert Threads auf einmal


----------



## Pyto (1. Feb 2012)

Das finde ich auch nicht gut 

Das heißt das eine besser Variante nur möglich ist wenn ich das Programm anders aufbaue ja?


----------



## musiKk (1. Feb 2012)

HimBromBeere hat gesagt.:


> Entweder du beendest ihn auch mal mit Thread.stop()



Heieiei. Dass sowas heute noch empfohlen wird. Wie der Dokumentation zu entnehmen, sind [c]Thread#stop()[/c] und Konsorten tunlichst zu vermeiden.


----------

