Java by API/java.lang.ref/PhantomReference

Материал из Java эксперт
Перейти к: навигация, поиск

new PhantomReference(T referent, ReferenceQueue<?> q)

   <source lang="java">
 

import java.lang.ref.PhantomReference; import java.lang.ref.Reference; import java.lang.ref.ReferenceQueue; import java.util.HashMap; public class Main {

 public static void main(String[] args) {
   ReferenceQueue referenceQueue = new ReferenceQueue();
   Object object = new Object() {
     public String toString() {
       return "Referenced Object";
     }
   };
   Object data = new Object() {
     public String toString() {
       return "Data";
     }
   };
   HashMap map = new HashMap();
   Reference reference = null;
   System.out.println("Testing PhantomReference.");
   reference = new PhantomReference(object, referenceQueue);
   map.put(reference, data);
   System.out.println(reference.get());
   System.out.println(map.get(reference));
   System.out.println(reference.isEnqueued());
   System.gc();
   System.out.println(reference.get());
   System.out.println(map.get(reference));
   System.out.println(reference.isEnqueued());
   object = null;
   data = null;
   System.gc();
   System.out.println(reference.get());
   System.out.println(map.get(reference));
   System.out.println(reference.isEnqueued());
 }

}


 </source>
   
  
 
  



PhantomReference: get()

   <source lang="java">
 

import java.lang.ref.PhantomReference; import java.lang.ref.Reference; import java.lang.ref.ReferenceQueue; import java.util.HashMap; public class Main {

 public static void main(String[] args) {
   ReferenceQueue referenceQueue = new ReferenceQueue();
   Object object = new Object() {
     public String toString() {
       return "Referenced Object";
     }
   };
   Object data = new Object() {
     public String toString() {
       return "Data";
     }
   };
   HashMap map = new HashMap();
   Reference reference = null;
   System.out.println("Testing PhantomReference.");
   reference = new PhantomReference(object, referenceQueue);
   map.put(reference, data);
   System.out.println(reference.get());
   System.out.println(map.get(reference));
   System.out.println(reference.isEnqueued());
   System.gc();
   System.out.println(reference.get());
   System.out.println(map.get(reference));
   System.out.println(reference.isEnqueued());
   object = null;
   data = null;
   System.gc();
   System.out.println(reference.get());
   System.out.println(map.get(reference));
   System.out.println(reference.isEnqueued());
 }

}


 </source>
   
  
 
  



PhantomReference: isEnqueued()

   <source lang="java">
 

import java.lang.ref.PhantomReference; import java.lang.ref.Reference; import java.lang.ref.ReferenceQueue; import java.util.HashMap; public class Main {

 public static void main(String[] args) {
   ReferenceQueue referenceQueue = new ReferenceQueue();
   Object object = new Object() {
     public String toString() {
       return "Referenced Object";
     }
   };
   Object data = new Object() {
     public String toString() {
       return "Data";
     }
   };
   HashMap map = new HashMap();
   Reference reference = null;
   System.out.println("Testing PhantomReference.");
   reference = new PhantomReference(object, referenceQueue);
   map.put(reference, data);
   System.out.println(reference.get());
   System.out.println(map.get(reference));
   System.out.println(reference.isEnqueued());
   System.gc();
   System.out.println(reference.get());
   System.out.println(map.get(reference));
   System.out.println(reference.isEnqueued());
   object = null;
   data = null;
   System.gc();
   System.out.println(reference.get());
   System.out.println(map.get(reference));
   System.out.println(reference.isEnqueued());
 }

}


 </source>