4

我有一个应用程序,我需要在 3 个单独的线程中调用 3 个方法,然后将它们杀死。根据Javadoc,我注意到该线程stop()甚至destroy()已被弃用。就像我一个接一个地启动一个线程,然后一个接一个地杀死。有没有一种特殊的方法可以杀死线程,因为我不能使用不推荐使用的方法

非常感谢任何帮助。再次感谢

4

3 回答 3

3

你不会杀死线程。您调用Thread.interrupt(),然后对interrupted状态或被InterruptedException 中断的线程做出反应。或者,您使用volatile标志。有关背景和更多信息,请参阅官方文档

更好的是,按照评论中的建议,使用线程池/执行器而不是原始线程。

于 2012-04-18T11:08:19.050 回答
0

以一种随时随地都能正常工作的方式终止流氓线程几乎是不可能的。

如果您可以控制正在运行的线程的源代码,则必须添加一个方法,以便在需要时停止线程。基本上,此方法更改一个布尔变量,线程定期检查该值以查看它是否可以继续。

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 系统。

您的里程会有所不同。

于 2012-04-18T11:07:26.583 回答
0

使用 join 方法,直到接收者完成其执行并死亡或指定的超时到期,无论先发生什么。

thread1.join(1);
thread2.join(2);
thread3.join(3);

您必须处理异常。

于 2012-04-18T11:22:18.513 回答