JAVA: thread.interrupted() false trotz thread.interrupt()

Persönliche Seite
Maxim schrieb:
> und starte ihn.
> Dann unterbreche ich diesen so
>
> thread.interrupt();

ACHTUNG Bitte die Java Doku über Thread lesen!
thread.interrupt() entläßt den Thread nur aus einer "blokierenden" 
Status!

stop() würde ihn beenden ist aber deprecated weil es dazu führen kann 
das Objekte nicht ordnungsgemäß hinterlassen werden!

Der mögliche Weg ist:
1
private boolean stop = false;
2
private boolean done = false;
3

4
public void run() {
5
 done = false;
6
 stop = false;
7
 while(!stop) {
8
  //Tu was
9
 }
10
 done = true;
11
}
12

13
public void stopThread() {
14
 stop = true;
15
}
16
public boolean finished() {
17
 return done;
18
}

Auf den Thread warten tut man dann mit *join()* wenn man das braucht!
Gast
Für was ist dann eigentlich interrupt() gut? Aus "wait" kommt der Thread 
durch notify() und aus "sleep" erst nach der vorgegebenen Zeit oder 
durch interrupt(). Aber das kann ja nicht der einzige Zweck sein.
Persönliche Seite
Maxim schrieb:
> Für was ist dann eigentlich interrupt() gut? Aus "wait" kommt der Thread
> durch notify() und aus "sleep" erst nach der vorgegebenen Zeit oder
> durch interrupt(). Aber das kann ja nicht der einzige Zweck sein.

Hast du dir doch eigentlich schon selber beantwortet ;)
Stell dir vor du hast ein Thread.sleep(10000); oder wait() gemacht.
Jezt trit aber irgend ein Ereignis auf (z.B. schließen eines Fensters) 
wodurch ein warten überflüssig werden würde, dein Thread, die Java VM 
und die Recourcen leben jezt aber weiter, und dein Thread kommt aus 
diesem blokierendem Zustand nichtmehr heraus... ob das auch auswirkungen 
auf Blokierendes lesen von InputStreams hat hab ich noch nie versucht zu 
ergründen, wäre aber auch so eine Sache wo man gff. nicht mehr 
"rauskommt".

Aber wie gesagt, sowas ist eigentlich sehr unschön...
Persönliche Seite
Michael G. schrieb:
> Das macht man so nicht. API-Dokumentation lesen und vor allem darueber
> klar werden, welche Methoden offiziell veraltet sind (so wie diese).
Meintest du dich jezt selbst damit? ;)

http://java.sun.com/javase/6/docs/api/java/lang/Thread.html

Weder interrupt() noch isInterrupted() sind veraltet/deprecated.

> Das macht man so nicht.
Machmal schon, steht so in der API wann und ich habe oben auch schon 
erwähnt das man normalerweise nicht darauf angewiesen ist und es 
vermeiden sollte.
Also manchmal einfach tief durchatmen bevor man voreilig in die Bresche 
springt.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.