ReferenceQueue 是一个简单的数据结构,当引用字段被清除(设置为 null)时,垃圾Collector将引用对象放置在该数据结构上。您可以使用引用队列来找出对象何时变为软可达、弱可达或幻象可达,以便您的程序可以根据该信息采取一些操作。例如,程序在得知某个对象已变为虚拟可访问时,可能会执行一些 post-finalization 清理处理,要求该对象不可访问(例如在 Java 堆外部重新分配资源)。
ReferenceQueue 可用于查明对象是否弱、软或幻像不可到达。现在更深入地研究一下,让我们定义此类中调用的构造函数,如下所示:
public ReferenceQueue():构造一个新的reference-object队列。
此外,让我们定义ReferenceQueue类中的方法
方法名称 | 方法说明 |
---|---|
poll() | 轮询此队列以查看引用对象是否可用。如果一个可用且没有进一步延迟,则将其从队列中删除并返回。否则,该方法立即返回 null。 |
remove() | 删除此队列中的下一个引用对象,并阻塞直到其中一个可用。 |
remove(long TimeOut) | 删除此队列中的下一个引用对象,并阻塞直到其中一个引用对象可用或给定的超时期限到期。 |
我们将上述方法分别详细讨论如下:
方法一: Queue poll()的方法Queue返回并删除容器前面的元素。它删除容器中的元素。当 Queue 为空时,该方法不会抛出异常,而是返回 null。
用法:
E poll()
返回:此方法返回容器前面或队列头部的元素。当队列为空时,它返回 null。
方法二:remove()方法Queue返回并删除容器前面的元素。它删除容器的头部。该方法抛出一个异常,称为Collections max()当队列为空时。
用法:
E remove()
返回:该方法返回头队列的。
异常:该函数抛出一个NoSuchElementException当队列为空时。
到目前为止,我们已经讨论完了本课程中的主要方法。让我们直接深入了解此类中这些方法的实现。
例子:
Java
// Java Program to illustrate ReferenceQueue Class
// Importing classes from package- java.lang.ref
// to make a deal between program with garbage collector
import java.lang.ref.ReferenceQueue;
import java.lang.ref.WeakReference;
// Class 1
// Helper class
class HelperClass {
// Method of this class
void Display()
{
// Print statement whenever
// function of HelperClass is called
System.out.println(
"HelperClass Display() invoked...");
}
}
// Class 2
// Main class
class GFG {
// Main drive method
public static void main(String[] args)
{
// Creating new object of HelperClass
HelperClass obj = new HelperClass();
// Creating Reference queue of HelperClass
ReferenceQueue<HelperClass> rq
= new ReferenceQueue<>();
// Creating Phantom reference
WeakReference<HelperClass> wr
= new WeakReference<>(obj);
// Display message
System.out.println("-> Reference Queue Object :");
// Printing reference queue object
System.out.println(rq);
// Display message
System.out.println("-> Reference Queue Poll :");
// Checking if phantom object is lined up
// or cleared in the queue
// using the poll() method
System.out.println(rq.poll());
}
}
-> Reference Queue Object : java.lang.ref.ReferenceQueue@214c265e -> Reference Queue Poll : null
相关用法
- Java java.lang.ref.Reference用法及代码示例
- Java java.lang.ref.WeakReference用法及代码示例
- Java java.lang.ref.PhantomReference用法及代码示例
- Java java.lang.ref.SoftReference用法及代码示例
- Java java.lang.reflect.AccessibleObject.getAnnotation()用法及代码示例
- Java java.lang.reflect.AccessibleObject.getAnnotations()用法及代码示例
- Java java.lang.reflect.AccessibleObject.getDeclaredAnnotations()用法及代码示例
- Java java.lang.reflect.AccessibleObject.isAccessible()用法及代码示例
- Java java.lang.reflect.AccessibleObject.setAccessible()用法及代码示例
- Java java.lang.reflect.Array.get()用法及代码示例
- Java java.lang.reflect.Array.getBoolean()用法及代码示例
- Java java.lang.reflect.Array.getByte()用法及代码示例
- Java java.lang.reflect.Array.getChar()用法及代码示例
- Java java.lang.reflect.Array.getDouble()用法及代码示例
- Java java.lang.reflect.Array.getFloat()用法及代码示例
- Java java.lang.reflect.Array.getInt()用法及代码示例
- Java java.lang.reflect.Array.getLength()用法及代码示例
- Java java.lang.reflect.Array.getLong()用法及代码示例
- Java java.lang.reflect.Array.getShort()用法及代码示例
- Java java.lang.reflect.Array.newInstance()用法及代码示例
- Java java.lang.reflect.Array.set()用法及代码示例
- Java java.lang.reflect.Array.setBoolean()用法及代码示例
- Java java.lang.reflect.Array.setByte()用法及代码示例
- Java java.lang.reflect.Array.setChar()用法及代码示例
- Java java.lang.reflect.Array.setDouble()用法及代码示例
注:本文由纯净天空筛选整理自varunkedia大神的英文原创作品 java.lang.ref.ReferenceQueue Class in Java。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。