2011-06-17 71 views
3

如果我有多個指向同一個對象的弱引用,並且沒有強引用。我可以確定當其中一個返回對象時,這兩個弱引用是否完好無損?對同一個對象的多個弱引用是否被清除?

+0

他們將全部設置或清除在一起。但是,如果您依賴於這一事實,我會重新考慮您的設計,因爲從一條指令到另一條指令可能會改變。 – 2011-06-17 08:57:52

+0

@Peter_Lawrey我完全相信他們會一起被刪除,儘管它可能看起來合乎邏輯。無論如何,依靠功能代碼將是一個完全的噩夢。 – Riduidel 2011-06-17 09:05:00

+0

我主要是從理論的角度提出這個問題。我想知道在設計中對同一個對象使用多個弱引用是否安全。我正在考慮使用任務對象,一旦任務完成,我將刪除所有強引用。但是,如果稍後檢索完成的任務,則需要確保我的模型仍處於一致狀態,以便可以跳過其他檢查。 – Dorus 2011-06-17 09:19:48

回答

1
WeakReference wr1 = new WeakReference(objX); 
...//somewhere else 
WeakReference wr2 = new WeakReference(objX); 

現在:

  1. 如果在某一時刻wr1.get()返回非空,然後wr2.get()將返回非空過。
  2. 但是wr1和wr2對象本身是獨立的gc-ed,它們的gs路徑彼此獨立,最重要的是獨立於objX。
+0

在第2點,你的意思是如果我將弱引用存儲在弱引用他們自己?因爲我不明白爲什麼wr1和wr2會被gc'ed,而我仍然可以達到他們,否則。 – Dorus 2011-06-17 09:15:11

+0

我的意思是,wr1和wr2的噴射是獨立於objX的噴射 – 2011-06-17 09:48:04

+1

是的,我知道了。處理弱引用時要記住一些事情。 – Dorus 2011-06-17 09:57:47

相關問題