2013-05-26 119 views
6

线程是否自行删除并在运行后得到垃圾回收,或者即使在run()方法完成后仍会继续存在并消耗内存?run()方法在Java中退出后线程是否会自动收集垃圾回收?

例如:

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

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

我想澄清这是否线程会从内存中被自动删除,或者它需要显式地完成。

+1

请注意,我们鼓励您使用'任务'而不是直接使用线程。两者在使用后都会收集垃圾,就像任何其他Java对象一样。 –

+0

@owlstead:你的意思是AsyncTask? – Rick77

+0

可能是下面的一个可能的副本:http://stackoverflow.com/questions/2423284/java-thread-garbage-collected-or-not – awsome

回答

8

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

1

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

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

0

线程在完成run方法时自动收集垃圾,因此您不必明确地执行该操作。

0

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

Why do threads leak on Android?