home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / sun / misc / Cleaner.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  1.3 KB  |  70 lines

  1. package sun.misc;
  2.  
  3. import java.lang.ref.PhantomReference;
  4. import java.lang.ref.ReferenceQueue;
  5. import java.security.AccessController;
  6.  
  7. public class Cleaner extends PhantomReference {
  8.    private static final ReferenceQueue dummyQueue = new ReferenceQueue();
  9.    private static Cleaner first = null;
  10.    private Cleaner next = null;
  11.    private Cleaner prev = null;
  12.    private final Runnable thunk;
  13.  
  14.    private static synchronized Cleaner add(Cleaner var0) {
  15.       if (first != null) {
  16.          var0.next = first;
  17.          first.prev = var0;
  18.       }
  19.  
  20.       first = var0;
  21.       return var0;
  22.    }
  23.  
  24.    private static synchronized boolean remove(Cleaner var0) {
  25.       if (var0.next == var0) {
  26.          return false;
  27.       } else {
  28.          if (first == var0) {
  29.             if (var0.next != null) {
  30.                first = var0.next;
  31.             } else {
  32.                first = var0.prev;
  33.             }
  34.          }
  35.  
  36.          if (var0.next != null) {
  37.             var0.next.prev = var0.prev;
  38.          }
  39.  
  40.          if (var0.prev != null) {
  41.             var0.prev.next = var0.next;
  42.          }
  43.  
  44.          var0.next = var0;
  45.          var0.prev = var0;
  46.          return true;
  47.       }
  48.    }
  49.  
  50.    private Cleaner(Object var1, Runnable var2) {
  51.       super(var1, dummyQueue);
  52.       this.thunk = var2;
  53.    }
  54.  
  55.    public static Cleaner create(Object var0, Runnable var1) {
  56.       return var1 == null ? null : add(new Cleaner(var0, var1));
  57.    }
  58.  
  59.    public void clean() {
  60.       if (remove(this)) {
  61.          try {
  62.             this.thunk.run();
  63.          } catch (Throwable var2) {
  64.             AccessController.doPrivileged(new 1(this, var2));
  65.          }
  66.  
  67.       }
  68.    }
  69. }
  70.