【问题标题】:Killing a thread in java android在java android中杀死一个线程
【发布时间】:2012-04-18 10:35:47
【问题描述】:

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

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

【问题讨论】:

标签: java android multithreading thread-safety deprecated


【解决方案1】:

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

更好的是,使用线程池/执行器而不是原始线程,如 cmets 中所建议的那样。

【讨论】:

  • 在 Weston 和 Joolan 制作的 cmets 之后,我发现使用线程池非常重要,因为它减少了一个接一个地启动线程的开销。我也找到了一个很好的例子,并看看这个,这对任何人都会很有帮助。因此这里是它的实现示例apachejava.blogspot.co.uk/2010/03/… 我已经接受了 Joolans 的回答,甚至 westons cmets 也帮助我通读了线程池
【解决方案2】:

以一种随时随地都有效的方式终止恶意线程几乎是不可能的。

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

public class MyTask implements Runnable {
    // Set this to true when thread must stop.
    private boolean mStopRequested = false;
    public void run() {
        while (mStopRequested == false) {
            // ...
        }
    }
}

如果您调用不提供这种方法的第 3 方库,那么您将不走运,不得不求助于丑陋的工具。一旦我不得不通过删除库访问的文件来终止长时间运行的第 3 方库调用(它抛出 FileNotFoundException 并退出)。而且这只适用于 Unix 系统。

您的里程会有所不同。

【讨论】:

    【解决方案3】:

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

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

    您必须处理异常。

    【讨论】:

      猜你喜欢
      • 2012-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-04
      • 2012-09-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多