Когда использовать фантомные ссылки в Java?

Возможный дубликат:
Вы когда-нибудь использовали ссылку 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();
}
...

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

Другие вопросы по тегам