Usando ReferenceQueue y WeakReference

Quiero cerrar correctamente el objeto Closeable cuando ya no esté referenciado por otros subprocesos.

Escribí una pequeña prueba, pero después de que el objeto se coloca en la cola, el método get devuelve un valor nulo, es decir, el método de sondeo devuelve el objeto adecuado que no tiene referente.

  public static void main(String[] args)
  {
   ReferenceQueue<Closeable> reaped = new ReferenceQueue<Closeable>();
   Closeable s = <SOME CLOSEABLE IMPL>;
   WeakReference<Closeable> ws = new WeakReference<Closeable>(s, reaped);
   s = null;

   System.gc();
   Closeable ro = (Closeable)reaped.poll().get();
   ro.close();
  }

Gracias por adelantado. Cualquier ayuda será apreciada.

Respuestas a la pregunta(1)

Su respuesta a la pregunta