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

时间:2012-03-22 16:44:26

标签: java reference phantom-reference

  

可能重复:
  Have you ever used Phantom reference in any project?

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

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

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

1 个答案:

答案 0 :(得分: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建议的内容大致相似。