当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Java java.lang.ref.ReferenceQueue用法及代码示例


ReferenceQueue 是一个简单的数据结构,当引用字段被清除(设置为 null)时,垃圾Collector将引用对象放置在该数据结构上。您可以使用引用队列来找出对象何时变为软可达、弱可达或幻象可达,以便您的程序可以根据该信息采取一些操作。例如,程序在得知某个对象已变为虚拟可访问时,可能会执行一些 post-finalization 清理处理,要求该对象不可访问(例如在 Java 堆外部重新分配资源)。

java.lang.ref.ReferenceQueue Class in 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


相关用法


注:本文由纯净天空筛选整理自varunkedia大神的英文原创作品 java.lang.ref.ReferenceQueue Class in Java。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。