# Thread anhalten



## Schaaaf (6. Mrz 2011)

Hallo,

ich habe einen Thread, der solange ein Aktion ausführt bis x = 1 ist.
Muss ich dann den Thread mit interrupt() beenden oder hört der bei Erfüllung von x=1 automatisch auf?


```
class MyThread extends Thread 
{  
    public void run() 
   {         
    	while (x != 1)
    	{
    		try {
        		sleep(1000);
        	             }
    		catch(InterruptedException e) {}
    	}
    	interrupt(); 
    }  
 }
```

Danke Euch schon mal.


----------



## Chumax (6. Mrz 2011)

probiere es doch einfach aus


----------



## Cola_Colin (6. Mrz 2011)

Der Thread wird beendet, sobald die run-Methode durchlaufen ist.
Du brauchst dort also kein interrupt().
Allerdings sollte x als volatile markiert sein, wenn es aus einem anderen Thread heraus verändert wird.


----------



## tagedieb (6. Mrz 2011)

Der Thread wird beendet wenn das Ende der run()-Methode erreicht wird. 

Das 
	
	
	
	





```
interrupt();
```
 kannst du dir sparen. Diese interrupt()-Methode wird verwendet um den Thread aus einem 2ten Thread zu stoppen. Allerdings sollte dies nur verwendet werden wenn der Thread in einem wait() oder IO Operation blockiert ist. Eine Abbruchbedinung wie du sie implementiert hast ist die schoenere Loesung.


----------



## Cola_Colin (6. Mrz 2011)

tagedieb hat gesagt.:


> Allerdings sollte dies nur verwendet werden wenn der Thread in einem wait() oder IO Operation blockiert ist. Eine Abbruchbedinung wie du sie implementiert hast ist die schoenere Loesung.



Gibt es ein Argument gegen:

```
while(!Thread.interrupted()) {
  //work
}
```

?


----------



## tagedieb (6. Mrz 2011)

Ich denke das ist Geschmackssache ;-)

Schau How to Stop a Thread or a Task

Allerdings solltest du 
	
	
	
	





```
isInterrupted()
```
 anstatt von 
	
	
	
	





```
interrupted()
```
 verwenden. Die 2te Methode loescht das Statusflag und wird bei einem zeiten Aufruf ein anderes Ergebnis liefern, was zu Fehlern fuehren kann.


----------



## Cola_Colin (6. Mrz 2011)

Das interrupted das Statusflag löscht war mir schon klar, wenn man das weiß kann man ja was dagegen tun.
isInterrupted hab ich nicht auf der Pfanne gehabt, keine Ahnung wieso.

Gut gut, dann geht das ja alles


----------



## Schaaaf (6. Mrz 2011)

Danke an alle. Habe mir schon fast gedacht, dass ich das interrupt() weglassen kann, aber da ich in dem Bereich Anfänger bin, war ich mir nicht sicher.


----------

