虚引用无法获取他引用的对象,下面程序将虚引用和引用队列相结合,可以看到被引用的对象被垃圾回收后,虚引用将被添加到引用队列中去。
/*
* 需求:将虚引用和引用队列结合使用,可以看到虚引用的对象被垃圾回收后,虚引用将被添加到引用队列
* */
import java.lang.ref.PhantomReference;
import java.lang.ref.ReferenceQueue;
import java.lang.ref.WeakReference;
public class PhantomReferenceTest {
public static void main(String[] args) throws Exception{
String str =new String("疯狂Java讲义");
ReferenceQueue rq=new ReferenceQueue();
WeakReference wr=new WeakReference(str);
PhantomReference pr=new PhantomReference(str,rq);
Object obj=wr.get();
System.out.println(obj);
System.out.println(wr.get());
str=null;
System.out.println(pr.get());
System.gc();
System.runFinalization();
System.out.println(rq.poll()==pr);
//rq.poll()函数作用为检索并移除文件的头
//rq.poll();
System.out.println(rq.poll()==pr);
}
}