Когда использовать phantom ссылки в Java?

Возможный дубликат:
Вы когда-нибудь использовали ссылку Phantom в любом проекте?

Я читал о разных типах ссылок. Я понимаю, как работают сильные, мягкие и слабые ссылки.

Но когда я читал о ссылках Phantom, я не мог их понять. Может быть, потому, что я не мог найти хороших примеров, которые показывают мне, какова их цель или когда их использовать.

Не могли бы вы показать мне некоторые примеры кода, которые используют ссылку Phantom?

Ответ 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();
}
...

Это более или менее похоже на то, что предлагает этот пост.