【问题标题】:Do threads get automatically garbage collected after run() method exits in Java?在 Java 中的 run() 方法退出后,线程是否会自动进行垃圾收集?
【发布时间】:2013-05-26 20:19:24
【问题描述】:

线程是在运行后自行删除并收集垃圾,还是在 run() 方法完成后仍继续存在并消耗内存?

例如:

Class A{
  public void somemethod()
  {
  while(true)
  new ThreadClass().start();
  }

   public class ThreadClass extends Thread{
        public ThreadClass()
        {}
        @Override
        public void run() {......}
     }
}

我想澄清一下这个线程是否会自动从内存中删除,或者是否需要明确地完成。

【问题讨论】:

  • 请注意,我们鼓励您使用Tasks 而不是直接使用线程。两者在使用后都会被垃圾回收,就像任何其他 Java 对象一样。
  • @owlstead:你的意思是 AsyncTask?
  • 可能与以下内容重复:stackoverflow.com/questions/2423284/…
  • 这样说吧:即使存在,你也无法访问(因为没有引用它),同理,线程完成后会被垃圾回收! :)
  • @Rick77 appologies,我的意思是像FutureTask 这样的任务,还有一个执行者......

标签: java android multithreading


【解决方案1】:

这将自动发生,即一旦线程完成其运行方法,内存将自动释放。

【讨论】:

    【解决方案2】:

    线程只存在到它们的 run 方法结束,之后它们才有资格进行垃圾回收。

    如果您需要内存非常宝贵的解决方案,您可能需要考虑ExecutorService。这将为您处理线程并让您专注于逻辑而不是处理线程和内存。

    【讨论】:

      【解决方案3】:

      线程会在run 方法完成时自动进行垃圾回收,因此您不必显式执行此操作。

      【讨论】:

        【解决方案4】:

        线程将在其运行方法完成后被垃圾回收。值得注意的例外是当您使用 android 调试器时。 android 调试器将阻止对它知道的对象进行垃圾收集,其中包括已完成运行的线程。

        Why do threads leak on Android?

        【讨论】:

          猜你喜欢
          • 2011-01-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-07-04
          • 1970-01-01
          • 2012-12-29
          • 2013-12-07
          • 2018-06-10
          相关资源
          最近更新 更多