何时在Java中使用幻像引用?

hqt*_*hqt 17 java reference phantom-reference

可能重复:
你有没有在任何项目中使用Phantom参考?

我已经阅读了不同类型的参考资料.我理解强大,软弱的参考是如何运作的.

但是,当我读到幻影参考时,我无法理解它们.也许是因为我找不到任何好的例子来告诉我他们的目的是什么或何时使用它们.

你能告诉我一些使用幻像参考的代码示例吗?

Lou*_*man 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();
}
...
Run Code Online (Sandbox Code Playgroud)

这与这篇文章的建议或多或少相似.