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.
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
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“)