gpt4 book ai didi

java - 将成员作为参数传递给新线程时的局部变量引用和 GC

转载 作者:行者123 更新时间:2023-12-02 03:04:30 25 4
gpt4 key购买 nike

我试图从根本上理解在以下情况下传递给线程的局部变量会发生什么。我需要在 someObject 上执行清理操作其中有 delete方法,该方法调用外部 API 通过其成员 id 删除 someObject 的实例。 .

public interface Deleteable {
public delete()
}

public SomeClass implements Deleteable {
int id;
public void delete() {
HttpApiCall.deleteById(this.id);
}
}

SomeClass someObject = null;
for(i = 0; i < 3; i++) {
// simple loop to illustrate problem
someObject = new SomeClass();
Runtime.getRuntime()
.addShutdownHook(new Thread(someObject::delete));
}

当程序执行时,在线程能够调用delete之前,SomeClass的某些实例是否会被GC回收?每个线程是否会收到自己的新副本,或者是否会对 someObject 的最后设置值进行操作?

我读了一些关于 volatile 的内容。关键字,但我不确定它对我有帮助。

最佳答案

没有。您将这些 someObject::delete 方法引用添加到 Runtime 中的集合。由于运行时仍然可以访问,因此这些对象也可以访问并且不应该获得GCd。

关于java - 将成员作为参数传递给新线程时的局部变量引用和 GC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41940737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com