home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &n…he Search for Life DVD 2 / DVD-ROM.iso / install / jre1_3 / lib / rt.jar / java / lang / ref / Finalizer.class (.txt) next >
Encoding:
Java Class File  |  1979-12-31  |  2.6 KB  |  141 lines

  1. package java.lang.ref;
  2.  
  3. import java.security.AccessController;
  4.  
  5. final class Finalizer extends FinalReference {
  6.    private static ReferenceQueue queue = new ReferenceQueue();
  7.    private static Finalizer unfinalized = null;
  8.    private static Object lock = new Object();
  9.    private Finalizer next = null;
  10.    private Finalizer prev = null;
  11.  
  12.    static native void invokeFinalizeMethod(Object var0) throws Throwable;
  13.  
  14.    private boolean hasBeenFinalized() {
  15.       return this.next == this;
  16.    }
  17.  
  18.    private void add() {
  19.       Object var1 = lock;
  20.       synchronized(var1) {
  21.          if (unfinalized != null) {
  22.             this.next = unfinalized;
  23.             unfinalized.prev = this;
  24.          }
  25.  
  26.          unfinalized = this;
  27.       }
  28.    }
  29.  
  30.    private void remove() {
  31.       Object var1 = lock;
  32.       synchronized(var1) {
  33.          if (unfinalized == this) {
  34.             if (this.next != null) {
  35.                unfinalized = this.next;
  36.             } else {
  37.                unfinalized = this.prev;
  38.             }
  39.          }
  40.  
  41.          if (this.next != null) {
  42.             this.next.prev = this.prev;
  43.          }
  44.  
  45.          if (this.prev != null) {
  46.             this.prev.next = this.next;
  47.          }
  48.  
  49.          this.next = this;
  50.          this.prev = this;
  51.       }
  52.    }
  53.  
  54.    private Finalizer(Object var1) {
  55.       super(var1, queue);
  56.       this.add();
  57.    }
  58.  
  59.    static void register(Object var0) {
  60.       new Finalizer(var0);
  61.    }
  62.  
  63.    private void runFinalizer() {
  64.       synchronized(this) {
  65.          if (this.hasBeenFinalized()) {
  66.             return;
  67.          }
  68.  
  69.          this.remove();
  70.       }
  71.  
  72.       try {
  73.          Object var2 = ((Reference)this).get();
  74.          if (var2 != null) {
  75.             invokeFinalizeMethod(var2);
  76.             var2 = null;
  77.          }
  78.       } catch (Throwable var3) {
  79.       }
  80.  
  81.       super.clear();
  82.    }
  83.  
  84.    private static void forkSecondaryFinalizer(Runnable var0) {
  85.       1 var1 = new 1(var0);
  86.       AccessController.doPrivileged(var1);
  87.    }
  88.  
  89.    static void runFinalization() {
  90.       forkSecondaryFinalizer(new 2());
  91.    }
  92.  
  93.    static void runAllFinalizers() {
  94.       forkSecondaryFinalizer(new 3());
  95.    }
  96.  
  97.    // $FF: synthetic method
  98.    static ReferenceQueue access$000() {
  99.       return queue;
  100.    }
  101.  
  102.    // $FF: synthetic method
  103.    static void access$100(Finalizer var0) {
  104.       var0.runFinalizer();
  105.    }
  106.  
  107.    // $FF: synthetic method
  108.    static Object access$200() {
  109.       return lock;
  110.    }
  111.  
  112.    // $FF: synthetic method
  113.    static Finalizer access$300() {
  114.       return unfinalized;
  115.    }
  116.  
  117.    // $FF: synthetic method
  118.    static Finalizer access$302(Finalizer var0) {
  119.       unfinalized = var0;
  120.       return var0;
  121.    }
  122.  
  123.    // $FF: synthetic method
  124.    static Finalizer access$400(Finalizer var0) {
  125.       return var0.next;
  126.    }
  127.  
  128.    static {
  129.       ThreadGroup var0 = Thread.currentThread().getThreadGroup();
  130.  
  131.       for(ThreadGroup var1 = var0; var1 != null; var1 = var1.getParent()) {
  132.          var0 = var1;
  133.       }
  134.  
  135.       FinalizerThread var2 = new FinalizerThread(var0);
  136.       ((Thread)var2).setPriority(8);
  137.       ((Thread)var2).setDaemon(true);
  138.       ((Thread)var2).start();
  139.    }
  140. }
  141.