Ich erstelle ein Thread mit z.B. Thread thread = new Thread(); und starte ihn. Dann unterbreche ich diesen so thread.interrupt(); und erhalte direkt in der nächsten Zeile von thread.interrupted() trotzdem false. Warum das?
kommt darauf ann was der thread in dem moment macht, wenn er auf eine IO-Resource wartet kann es eine weile dauern.
Aha, danke. Bin auch darauf gekommen und habe eine kleine Warteschleife programmiert, aber die war wohl zu kurz.
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!
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.
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...
Maxim schrieb: > Ich erstelle ein Thread mit z.B. > > Thread thread = new Thread(); > > und starte ihn. > Dann unterbreche ich diesen so > > thread.interrupt(); Das macht man so nicht. API-Dokumentation lesen und vor allem darueber klar werden, welche Methoden offiziell veraltet sind (so wie diese).
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.