Когда использовать фантомные ссылки в 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();
}
...
Это более или менее похоже на то, что предлагает этот пост.