如何从Java中的另一个线程中杀死一个线程?

我从主线程调用两个线程,称它们为线程1和线程2.当线程1停止时,我也想停止或杀死线程2。 我怎么能这样做?我想要的实际输出有一个变化。那就是有一个主类也是thread.From主类我调用thread1和thread2.I我从主类给出一个输入但是当这个输入被改变时我想杀死正在运行的thread1并再次用另一个输入启动它。第二个线程,thread2将运行thread1给出的输出。所以当第一个线程被杀死时,第二个线程将被运行但只有当t6是该线程的输入时才会给出输出。

Java已经弃用了显式杀死另一个线程的方法(比如Thread.stop / Thread.destroy)。 正确的方法是确保另一个线程上的操作可以处理被告知停止(例如,他们期望一个InterruptedException,这意味着你可以调用Thread.interrupt()来阻止它)。

您可能还有兴趣将第二个线程设置为守护程序线程 ,这意味着如果VM中的所有其他线程都已完成,则该进程将退出。

请参阅此Java专家文章 ,了解如何干净地关闭线程。

简而言之,本文建议在线程代码中使用Thread.interrupt()以及相应的InterruptedException处理。 这本身就是一个有趣的讨论,我很少看到正确的事情。

根据这些说明 ,最好使用标志变量来告诉另一个线程干净地停止其工作。

在线程的run()方法中,如果要停止线程,请检查通过访问器方法(如shutdown()设置的属性,使用该值结束while循环。 例如:

 boolean stopping = false; Thread currentThread = null; public void run() { currentThread = Thread.currentThread(); while (!isStopping()) { // do something, sleep a while } } public synchronized void shutdown() { stopping = true; currentThread.notifyAll(); } public synchronized boolean isStopping() { return stopping; }