这是一些代码:
public class A {
private volatile B b;
public void methodC() {
b.doSomething();
}
public void setB(B newB) {
this.b = newB;
}
}
“线程 1”正在通过执行 methodC() 来执行 b.doSomething()。
同时“线程2”将一个新的B对象设置到“b”中。
我的问题是:
尽管“b”之前引用的对象的 doSomething() 方法仍在执行,但它是否会被垃圾回收?
最佳答案
不可以,因为为了调用成员函数,您需要拥有对该对象的引用。因此,调用 b.doSomething()
的线程将持有一个引用,从而防止垃圾收集。
尽管请查看下面 Jon Harrop 的回答,了解 b
可能被 GC
处理的情况。
关于java - 这是否被垃圾收集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10210092/