Joh*_*Lim 2 java multithreading garbage-collection
这是一些代码:
public class A {
private volatile B b;
public void methodC() {
b.doSomething();
}
public void setB(B newB) {
this.b = newB;
}
}
Run Code Online (Sandbox Code Playgroud)
'Thread 1'通过执行methodC()执行b.doSomething().
同时'线程2'将新的B对象设置为'b'.
我的问题是:
先前由'b'引用的对象是否可以被垃圾收集,尽管它上面的doSomething()方法仍在执行?
不,因为要调用成员函数,您需要引用该对象.因此,正在调用的线程b.doSomething()将持有引用,从而防止垃圾收集.
虽然检查以下乔恩·哈罗普的答案的情况时,b可GC倒是.