gpt4 book ai didi

Java PhantomReference 未被排队

转载 作者:行者123 更新时间:2023-12-01 12:28:13 24 4
gpt4 key购买 nike

我试图了解 Java 中 PhantomReferences 的工作原理,并为此编写了这个程序。

public static void main(String[] args) throws InterruptedException {

final ReferenceQueue refQueue = new ReferenceQueue();
Employer emp = new Employer();
emp.setName("John");
PhantomReference<Employer> phantom = new PhantomReference<Employer>(emp, refQueue);
List referenceList = new ArrayList();
referenceList.add(phantom);

Thread th = new Thread(new Runnable(){

@Override
public void run() {
try {
PhantomReference ref = (PhantomReference) refQueue.remove();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
th.start();

for (int i = 0; i < 50000000; i++) {
if(i==(50000000-1)){
Thread.sleep(10000);
System.out.println(i);
System.out.println("setting emp to null ");
emp=null;
System.gc();
}
}
}

但是在这里我没有看到引用被排队,如 java API 文档中提到的。我在这里遗漏了什么吗?

最佳答案

这是重复的...但我找不到原件。

简而言之:它将会被排队......总有一天。不是立即。也许在下一次 GC 运行之后,也许下周。无法保证时间安排。

关于Java PhantomReference 未被排队,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26161046/

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