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

Persönliche Seite #1417925
Lesenswert?

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 #1418179
Lesenswert?

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 #1419031
Lesenswert?

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 #1420853
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren