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