# Thread zerstören / stoppen in java 1.5?



## OhNo (30. Aug 2006)

Hey 

hat irgendjemand ne Ahnung wie ich in Java 1.5 einen Thread stoppe bzw. zerstören kann? Suspend(), stop() und destroy() sind alle deprecated und wenn ich suspend() und destroy() benutze stürzt mein Programm eh ab.

Die Javadocs und alle anderen Hilfen behandeln immer Threads in denen eine Funktion in einer Schleife ausgeführt wird, bei mir ist das aber nicht so... es soll nur EINE Funktion EINMAL ausgeführt werden. Da diese Funktion sehr lange dauert (datenbankzugriffe etc...) will ich den thread auch stoppen können!


Danke !

OhNo


----------



## Wildcard (30. Aug 2006)

Sofern es eine einzige Anfrage an die DB ist die so lange dauert hast du schlechte Karten.
Ansonsten musst du vor dem Aufruf jeder neuen Anfrage überprüfen ob du weitermachen darfst.


----------



## thE_29 (30. Aug 2006)

Einen Datenbankzugriff kannste net abwürgen 

Der wird einfach gemacht, auch wenns solange dauert...

Also wennste nen select machst, der xxx Sekunden dauert und du den Thread irgendwie abwürgen würdest, würde der den select trotzdem fertig machen!


----------



## OhNo (30. Aug 2006)

Es geht mir aber gar nicht um den Datenbankzugriff, das ist nicht nur ein großer Datenbankzugriff, sondern viele kleine wo ich auf jeden Fall die chance hab zwischendrin mal den Thread abzubrechen aber es gibt ja keine Methode die ihn abbricht oder?

Wie gesagt das mit dem DBzugriff lasst mal meine Sorge sein, stellt euch von mir aus 1 millionen verschiedene Funktionen vor die nacheinander abegearbeitet werden.... wie kann ich dann den Thread abbrechen/zerstören???


----------



## hupfdule (30. Aug 2006)

Anonymous hat gesagt.:
			
		

> wie kann ich dann den Thread abbrechen/zerstören???



Indem du ein Flag innerhalb des Threads setzt, um zu kennzeichnen, dass er beendet werden soll. Nach jedem Schritt prüfst du dann, ob diese Flag gesetzt ist. Wenn ja, beendest du die Methode.


----------



## OhNo (30. Aug 2006)

und wie beende ich die Methode?

Danke!


----------



## thE_29 (30. Aug 2006)

Ein Thread wird nur 1mal durchlaufen!

Einfach return; dann hört es auf!


----------



## byte (30. Aug 2006)

In Java 5 würde ich die Threads mit einem ExecutorService verwalten. Der kann die Threads bei Bedarf auch jederzeit einfach von aussen abschiessen:


```
ExecutorService exec = Executors.newCachedThreadPool();
exec.execute(aRunnable);
...
//bei Bedarf:
exec.shutdownNow();
```


----------



## Larouso (30. Aug 2006)

also eigentlich beendet man einen Thread mit interrupt() - jedenfalls kenn ich das so.


----------



## Leroy42 (30. Aug 2006)

Larouso hat gesagt.:
			
		

> also eigentlich beendet man einen Thread mit interrupt() - jedenfalls kenn ich das so.


Aber da wird nur ein Flag gesetzt der innerhalb des Threads mit isInterrupted() abgefragt werden muß.


----------

