2

为了完成一些任务,比如读取和解析一个长文件,我总是一个新线程。例如,当用户单击显示场景 1(这是一个首先需要解析的长文本文件)时,我从运行 GUI 的主线程启动一个新线程,如下所示:

Runnable r = new Runnable() {
   @Override
   public void run() {
      // do the work here
   }
};
new Thread(r,"new thread").start();

就像我在应用程序运行时启动许多线程一样。这些线程什么时候死?我想他们不会在完成工作后立即死去。是不是它们像其他对象一样被垃圾收集?

4

2 回答 2

3

JVM (GC) 对线程的处理与普通对象略有不同。

线程在活动时是 GC 根之一,即使您没有任何变量引用它。(我们不希望我们的线程在长时间运行的过程中被 GC。)

但是一旦它死掉(意味着当 run 方法完成时),它就可以进行垃圾回收了。

于 2012-10-15T05:03:21.327 回答
2

看看线程的生命周期。一旦声明它将(希望)最终进入死亡状态。一旦 Thread 死了(即不是isAlive()),GC 就可以启动它(当然,如果满足垃圾收集的要求)

回答您的问题:一旦线程启动并且不再存在,是的,GC 会将其视为任何其他对象。

于 2012-10-15T04:54:40.347 回答