java - 这是否被垃圾收集?

标签 java multithreading garbage-collection

这是一些代码:

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/

相关文章:

java - 通过另一个类中的列表输出数据库信息 - Eclipse Android SQLite

java - JNI 通过引用传递,这可能吗?

java - ExecutorService.execute() 静默退出 run() 方法

java - 使用 jGit 进行垃圾收集

.net - 如何模拟此应用程序挂起方案?

algorithm - 有哪些确定性垃圾收集算法?

java - 这三个特殊的浮点值是什么意思 : positive infinity, 负无穷大,NaN?

java - 没有选择的 hibernate 更新

java - 同步缓存项目

c# - .NET 线程 : How to wait for other thread to finish some task