2011-06-17 65 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

相关问题