我已经了解了不同类型的引用,了解强引用、软引用和弱引用的工作原理。
但是当我读到幽灵引用时,我并不能真正理解它们。可能是因为我找不到任何好的示例来展示它们的目的或者何时使用它们。
你能否给我展示一些使用幽灵引用的代码示例呢?
我已经了解了不同类型的引用,了解强引用、软引用和弱引用的工作原理。
但是当我读到幽灵引用时,我并不能真正理解它们。可能是因为我找不到任何好的示例来展示它们的目的或者何时使用它们。
你能否给我展示一些使用幽灵引用的代码示例呢?
我自己从未尝试过这种做法,因为只有极少数人需要它。但我认为这是一种方法。
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();
}
...
这与该帖子所建议的大致相似。