¿Cuándo usar referencias fantasmas en Java?
reference phantom-reference (1)
Posible duplicado:
¿Alguna vez has usado la referencia fantasma en algún proyecto?
He leído sobre los diferentes tipos de referencia. Entiendo cómo funcionan las referencias fuertes, suaves y débiles.
Pero cuando leí sobre referencias fantasmas, realmente no pude entenderlas. Tal vez porque no pude encontrar ningún buen ejemplo que me muestre cuál es su propósito o cuándo usarlos.
¿Podría mostrarme algunos ejemplos de código que usan una referencia fantasma?
Nunca lo he hecho yo mismo, muy pocas personas lo necesitan, pero creo que esta es una forma de hacerlo.
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();
}
...
Esto es más o menos similar a lo que sugiere esta publicación .