18

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

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

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

4

1 回答 1

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

这或多或少类似于这篇文章的建议。

于 2012-03-22T17:45:15.723 回答