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