溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何在Java中引用隊(duì)列和虛引用

發(fā)布時(shí)間:2021-06-08 17:32:38 來源:億速云 閱讀:187 作者:Leah 欄目:編程語言

如何在Java中引用隊(duì)列和虛引用?相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。

一 點(diǎn)睛

引用隊(duì)列由ReferenceQueue類表示,它用于保存被回收后對(duì)象的引用。當(dāng)聯(lián)合使用軟引用、弱引用和引用隊(duì)列時(shí),系統(tǒng)在回收被引用的對(duì)象之后,將把它所回收對(duì)象對(duì)應(yīng)的引用添加到關(guān)聯(lián)的引用隊(duì)列中。而虛引用在對(duì)象被釋放之前,將把它對(duì)應(yīng)的虛引用添加到它關(guān)聯(lián)的引用隊(duì)列中,這使得可以在對(duì)象被回收之前采取行動(dòng)。

虛引用無法獲取它所對(duì)應(yīng)的對(duì)象。

二 實(shí)戰(zhàn)

1 代碼

import java.lang.ref.*;
public class PhantomReferenceTest
{
  public static void main(String[] args)
   throws Exception
  {
   // 創(chuàng)建一個(gè)字符串對(duì)象
   String str = new String("瘋狂Java講義");
   // 創(chuàng)建一個(gè)引用隊(duì)列
   ReferenceQueue rq = new ReferenceQueue();
   // 創(chuàng)建一個(gè)虛引用,讓此虛引用引用到"瘋狂Java講義"字符串
   PhantomReference pr = new PhantomReference (str , rq);
   // 切斷str引用和"瘋狂Java講義"字符串之間的引用
   str = null;
   // 取出虛引用所引用的對(duì)象,并不能通過虛引用獲取被引用的對(duì)象,所以此處輸出null
   System.out.println(pr.get()); //①
   // 強(qiáng)制垃圾回收
   System.gc();
   System.runFinalization();
   // 垃圾回收之后,虛引用將被放入引用隊(duì)列中
   // 取出引用隊(duì)列中最先進(jìn)入隊(duì)列中的引用與pr進(jìn)行比較
   System.out.println(rq.poll() == pr);  //②
  }
}

2 運(yùn)行

null
true

看完上述內(nèi)容,你們掌握如何在Java中引用隊(duì)列和虛引用的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI