
文章目录Java ReferenceQueue总结概述代码实现WeakReferenceReferenceQueueJava ReferenceQueue总结概述ReferenceQueue 是 Java 中用于与引用对象配合使用队列 引用对象包括SoftReference(软引用)、WeakReference(弱引用)、PhantomReference(虚引用)。当被引用的对象被垃圾回收后对应的引用对象会被自动添加到 ReferenceQueue中从而允许程序感知到对象已经被回收并执行响应的清理逻辑。ReferenceQueue 是线程安全的。代码实现WeakReferenceReferenceQueueclassMyObject{privateStringname;publicMyObject(Stringname){this.namename;}Overrideprotectedvoidfinalize()throwsThrowable{System.out.println(this 被垃圾回收了);super.finalize();}OverridepublicStringtoString(){returnMyObject{namename};}}publicclassMain{publicstaticvoidmain(String[]args)throwsInterruptedException{ReferenceQueueMyObjectqueuenewReferenceQueue();MyObjectobjnewMyObject(小明);WeakReferenceMyObjectweakRefnewWeakReference(obj,queue);System.out.println(创建弱引用: weakRef.get());// 清除强引用objnull;// 手动触发 GC仅建议在测试中使用System.gc();Thread.sleep(100);// 等待 GC 完成WeakReferenceref;while((ref(WeakReference?extendsMyObject)queue.poll())!null){System.out.println(从ReferenceQueue中获取引用对象: ref);System.out.println(引用对象的数据ref.get());}System.out.println(weakRef.get() weakRef.get());}}输出信息创建弱引用: MyObject{name小明} MyObject{name小明} 被垃圾回收了 从ReferenceQueue中获取引用对象: java.lang.ref.WeakReference6d03e736 引用对象的数据null weakRef.get() null说明创建 MyObject 对象通过 WeakReference 关联 ReferenceQueue。当 MyObject 对象被设置为 null手动触发 GC 后对象被回收后弱引用被添加到 ReferenceQueue 队列中。可以通过 enqueue.poll() 获取到引用对象。