2012-03-22 34 views
16

可能重複:
Have you ever used Phantom reference in any project?何時在Java中使用幻影引用?

我看了一下不同類型的參考。我瞭解強大,軟弱的參考文獻是如何工作的。

但是當我讀到幻影參考時,我無法真正理解它們。也許是因爲我找不到任何能夠告訴我他們的目的是什麼或者何時使用它們的好例子。

你能告訴我一些使用幻影參考的代碼示例嗎?

+0

或可能:http://stackoverflow.com/questions/1599069/have-you-ever-used-phantom-reference-in-any-project – 2012-03-22 16:47:39

+0

簡答:幾乎沒有應用程序,除了使用它作爲比重寫'finalize'更好,更安全的方法來完成。 – 2012-03-22 17:22:52

+0

@LouisWasserman請你給我一個詳細的例子。我希望看到它。謝謝:)(只是給我如何使用幻影參考,而不是最終確定) – hqt 2012-03-22 17:24:55

回答

11

我從來沒有這樣做過 - 很少有人需要它 - 但我認爲這是一種方法來做到這一點。

abstract class ConnectionReference extends PhantomReference<Connection> { 
    abstract void cleanUp(); 
} 
... 
ReferenceQueue<Connection> connectionQueue = new ReferenceQueue<>(); 
... 
Connection newConnection = ... 
ConnectionReference ref = new ConnectionReference(newConnection, connectionQueue, ...); 
... 
// draining the queue in some thread somewhere... 
Reference<? extends Connection> reference = connectionQueue.poll(); 
if (reference != null) { 
    ((ConnectionReference) reference).cleanUp(); 
} 
... 

這或多或少類似於this post的建議。