我有一个应用程序,我需要在3个单独的线程中调用3个方法然后杀死它们。根据Javadoc,我注意到线程stop()
甚至destroy()
已被弃用。就像我在另一个之后开始一个线程然后一个接一个地杀死它。是否有一种特殊方法可以杀死线程,因为我无法使用弃用的方法
任何帮助非常感谢。 再次感谢
答案 0 :(得分:3)
你不会杀死线程。您拨打Thread.interrupt(),然后对正在被中断的线程中的interrupted
状态或InterruptedException
做出反应。或者,您使用volatile
标志。有关背景和更多信息,请参阅the official documentation。
更好的是,使用线程池/执行器而不是原始线程,如注释中所示。
答案 1 :(得分:0)
以每次无处不在的方式终止流氓线程几乎是不可能的。
如果您可以控制正在运行的线程的源代码,则必须添加一个方法,您可以在需要时停止该线程。基本上,此方法更改布尔变量,并且线程会定期检查该值以查看它是否可以继续。
public class MyTask implements Runnable {
// Set this to true when thread must stop.
private boolean mStopRequested = false;
public void run() {
while (mStopRequested == false) {
// ...
}
}
}
如果你打电话给那些没有提供这种方法的第三方图书馆,那么你就不走运了,不得不诉诸丑陋的kludges。一旦我不得不通过删除库访问的文件来杀死长时间运行的第三方库调用(它抛出了一个FileNotFoundException并退出)。而这只适用于Unix系统。
您的里程会有所不同。
答案 2 :(得分:0)
使用join方法,直到接收器完成执行并死亡或指定的超时到期,无论先发生什么。
thread1.join(1);
thread2.join(2);
thread3.join(3);
您必须处理异常。