# Alternative zu Thread : stop() ?



## major66 (29. Jan 2004)

Hallo zusammen,

habe eine Frage zur *deprecated*-Methode stop() in Thread:

Mein Programm verwendet die Methode stop(), um einen Thread abzubrechen (funktioniert optimal).
Um aber dem vorzubeugen, dass die Methode in zukünftigen Java-Versionen GAR nicht mehr zur Verfügung steht, würde ich gerne eine nicht als *deprecated* gekennzeichnetete    Methode verwenden.

Leider klappt weder  interrupt() noch destroy().
Beide setzen die run()-Methode weiterhin fort.

Um euch noch zu illustrieren, für was ich überhaupt den Thread verwende (warum ich die Ausführung nicht nur unterbrechen, sondern endgültig abbrechen möchte), hier die Kurzfassung der run-Methode:


```
run() {
   Algorithmen.faktorisierungPlusAusgabe(BigInteger zahl, JTextArea ausgabeFeld);
}
```

Es geht also nur darum, dass der Benutzer die Berechnung der Faktorisierung abbrechen kann, wenn es ihm zu lange dauert bzw. ihm die bisher erhaltenen Zwischenergebnisse bereits ausreichen. Deshalb wird die Ausgabe auch gleich direkt ins Ausgabefeld geschrieben und nicht als Liste zurückgegeben (die Version gibt's auch).
Wie gesagt, weder  interrupt() noch destroy() beendet den Thread endgültig, beide setzen ihn nach kurzer Zeit fort. Warum?

Wie gesagt, mit der bisherigen Funktionalität bin ich voll zufrieden, mich stören halt die Compiler-Warnungen.
Kann mir jemand versichern, dass die Methode stop() auch in zukünftigen Java-Versionen vorhanden sein wird
UND dass durch meine Thread-Nutzung keine kritischen Speicherbereichszugriffe gibt ?  Dann lass ich alles wie's ist (never change a running system :wink: )

Ansonsten wäre ich Änderungsvorschlägen nicht abgeneigt,
Vielen Dank schon mal,

M


----------



## no0ne (29. Jan 2004)

hi major66

also so wie ich das verstanden habe ist stop() deprecated weil sie den thread einfach zu einem zeitpunkt anhaelt den man vorher nicht bestimmen kann und es deshalb sein kann dass die daten inkonsitent bleiben

deswegen soll man mit der methode interrupt() setzt du ein flag, dass du in deinem thread mit isInterrupted() ueberpruefen kannst. gibt isInterrupted() "true" zurueck weisst du dass der thread beendet werden soll und kannst noch aufraeumarbeiten erledigen bevor du ihn beendest; du musst dir jetzt also einen teil selber schreiben

ich hofffe ich konnte mit meinem begrenzten wissen helfen, ich bin mir auch nicht sicher ob das alles 100% richtig is, aber ich denke im grossen und ganzen sollte es so ungefaehr sein.

mfg felix

[edit] wenn du das genauer nachlesen willst kann ich dir das javabuch empfehlen, dort steht das im kapitel 22, Multithreading


----------



## Stefan1200 (30. Jan 2004)

Für die Vollständigkeit noch einen Online Link, in dem man das Thema im JavaBuch nachlesen kann:
http://www.rz.fhtw-berlin.de/hjp3/k100142.html#threadabbrechen


----------



## Major66 (1. Feb 2004)

Hallo Leute,

danke für die Tips und Links.
Leider konnte ich dadurch nicht mehr erfahren als ich schon wußte.
Aber anscheinend gibt's auch nicht mehr Möglichkeiten.
interrupt() ist bei mir nicht anwendbar, weil ich nicht periodisch ein Flag abfragen kann, da praktisch die gesamte Lebenszeit des Threads durch EINEN Methodenaufruf draufgeht. Die Ausführung dieser Methode abzubrechen, geht wohl nur mit stop().

mfg,
major


----------



## Nobody (3. Feb 2004)

nicht ganz:
hab das noch nicht getestet, aber evtl funzts ja

fast immer sieht das in nem thread ja so aus:
while(true)

das ganze könnte man doch durch
while(!isInterrupted())
ersetzten

wenn du noch mehr drin hast, kannsts ja auch kombinieren und danach nochmal das ganze abfragen und entsprechend reagieren


----------



## René Link (4. Feb 2004)

Hier habe ich auch noch etwas, warum stop, suspend und resume deprecated sind.

http://www.computer-link.de/view.php?paragraphID=113


----------



## major66 (4. Feb 2004)

@Rene : danke für den link, hatte ich schon gelesen. Habe aber keinen Monitor ->  keine kritischen Methoden -> stop verwenden ok ?

@nobody : danke, nur leider hab ich keine while-Schleife im Thread, sondern nur den Aufruf der u.U. sehr lange dauernden Methode xxx. Die Ausführung dieser will ich auf Wunsch abbrechen können -> keine andere Möglichkeit als stop() ?


----------



## René Link (4. Feb 2004)

Hi,

wenn du sagst, dass es bei dir keine Race Conditions und somit auch keine inkonsitenten Daten gibt ist die
Verwendung von stop völlig ok. Man muss halt nur wissen, wann man es anwenden kann und wann es
zur Katastrophe führen kann.


----------



## major66 (5. Feb 2004)

danke, DAS wollte ich hören   

es besteht auch nicht die Gefahr, dass die Methode in zukünftigen Java-Versionen verschwindet, oder ?

mfg,
major


----------



## Javahnsinn (5. Feb 2004)

Also stop() ist da zwar deprecated,
aber die API des *1.5.0 Release *bietet die auch noch an
(uff!)

Ich glaub', dass stop() eines Tages verschwinden wird, ist ebensowenig zu erwarten  wie ein Verschwinden von "*kill -9*" aus Unix. Ist immer gut, wenn man einen Not-Aus hat :wink: 

Viel Spaß beim Coden,
Jürgen


----------



## Beni (7. Feb 2004)

DuoICE hat gesagt.:
			
		

> Ich glaub', dass stop() eines Tages verschwinden wird, ist ebensowenig zu erwarten  wie ein Verschwinden von "*kill -9*" aus Unix.


Vorallem weil das JDK abwärtskompatibel ist, das verschwindet mit 100% Garantie nicht  :wink: 

mfg Beni


----------

