Thread killen

Hi,
ich möchte einen Thread, von dem ich den Namen weiss, gerne stoppen. Allerdings weiss ich nicht, wie das geht.

wenn ich folgendes mache, klappt das nicht, da ich ja eigentlich einen neuen Thread anlege und nicht den alten kille.

Thread t = new Thread();
t.setName(name);
t.stop();

wie mache ich denn das??
ich weiss, dass man stop() nicht verwenden soll, aber es muss sein und ist auch gewollt.
steffi

Auch hi.

Gib mal unter google.de ‚javabuch.pdf‘ ein und geh auf die Seite 184ff. Das müsste hilfreich sein :smile:

mfg M.L.

äh, welchen Link?
ich finde nur Leute, Virtuelle Maschinen und einen Forumartikel!

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Moin

ich möchte einen Thread, von dem ich den Namen weiss, gerne
stoppen. Allerdings weiss ich nicht, wie das geht.

Name ? Was willst du den damit, du brauchst eine referenz auf den Thread. (currentThread() ?)

ich weiss, dass man stop() nicht verwenden soll, aber es muss
sein und ist auch gewollt.

Nein es ist nicht so gewollt: stop() tötet im Extremfall die JVM. stop ersettet alle Monitor und synchronized-Blöcke mit dne der Thread zu tun hatte, auch die von gc. Danach geht i.d.R. gar nichts mehr.

Versuchs mit „interrupt()“

cu

Nein es ist nicht so gewollt: stop() tötet im Extremfall die
JVM. stop ersettet alle Monitor und synchronized-Blöcke mit

Nicht zu vergessen dass stop() deprecated ist.

http://java.sun.com/j2se/1.4.2/docs/guide/misc/threa…

Versuchs mit „interrupt()“

interrupt() alleine reicht ggfs. nicht.

http://builder.com.com/5100-6370-5144546.html

The best, recommended way to interrupt a thread is to use a shared
variable to signal that it must stop what it is doing.

Gruss, Patrick

In meiner run-Methode lasse ich einen Prozess ausführen. wenn dieser nicht beendet wird, muss doch der Thread ebenfalls noch leben, oder???

run(){..
hier ist Thread.activeCount()); \>1
Process p = Runtime.getRuntime().exec(command);
..
}

dann möchte ich den Thread killen:

public static void doKillJob(String name) 
{
 try 
 {
 Thread t = doFindThread(name);
 if (t != null) --\> t ist aber null!
 t.stop();
 }
}

private static Thread doFindThread(String name) {
 System.out.println("Thread.activeCount()); --\> hier nur 1

 Thread[] threads = new Thread[Thread.activeCount()];
 Thread.enumerate(threads);
 for (int i = 0; i main
 if (threads[i].getName().equals(name))
 return threads[i];
 }
 return null;
}

wenn ich den Thread starte, sind 3 Threads vorhanden, ich wenn ich den thread stoppen will, ist nur noch einer aktiv. Wo hab ich denn da jetzt meinen Denkfehler?
steffi

Moin

In meiner run-Methode lasse ich einen Prozess ausführen. wenn
dieser nicht beendet wird, muss doch der Thread ebenfalls noch
leben, oder???

Nein. Process und Thread sind 2 grundverschiedene Dinge. Du startest exec und der Thread läuft dann unabhängig von dem Process weiter. Der Code:

run(){
 System.out.println ("vorher");
 Process p = Runtime.getRuntime().exec(command);
 System.out.println ("nachher");
}

wird dir das anschaulich zeigen.

Processe kann man nur über Process.destroy() versuchen zu töten (unter windows gehts nicht immer, unter Linux hat’s den gleichen Effekt wie ein normaler kill, ohne „-9“)

cu