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

2022-09-02 22:24:10

我已经阅读了不同类型的参考。我理解强,软和弱引用的工作原理。

但是当我读到幻影引用时,我无法真正理解它们。也许是因为我找不到任何好的例子来说明它们的目的是什么或何时使用它们。

你能给我看一些使用幻像引用的代码示例吗?


答案 1

我自己从来没有这样做过 - 很少有人需要它 - 但我认为这是做到这一点的一种方法。

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();
}
...

这或多或少与这篇文章所暗示的相似。


答案 2