当线程中的run()
方法执行完毕或调用该方法的函数执行完毕时,线程是否被垃圾回收?
我没有任何问题,但我想避免内存泄漏等情况。
对于喜欢代码的人:
public void SomeClass {
public SomeClass() {
}
public void someMethod() {
Object data = veryBigObject;
while(true) {
MyThread thread = new MyThread(veryBigObject);
thread.run();
try {
Thread.sleep(1000);
} catch (InterruptedException e) { /* do nothing */ }
}
}
public static void main(String[] args) {
SomeClass myclass = SomeClass();
myclass.someMethod();
}
}
public class MyThread extends Thread {
private Object data;
public Thread(Object data) {
this.data = data;
}
public void run() {
// do stuff with data
}
}
在我所知道的所有编程语言中,垃圾(如果该语言有)都是在方法结束时收集的。我认为Java也是如此。这意味着在someMethod()
中创建的线程在someMethod()
结束之前理论上不会被收集。如果我们假设while循环运行了很长时间,应用程序将耗尽内存并崩溃。
我的问题是:这是真的吗?如果是,该怎么避免?