这是垃圾收集还是没收?

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()方法仍在执行?

Nic*_*ick 7

不,因为要调用成员函数,您需要引用该对象.因此,正在调用的线程b.doSomething()将持有引用,从而防止垃圾收集.

虽然检查以下乔恩·哈罗普的答案的情况时,bGC倒是.