當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。