OK, here is a quick finalizer question.
class A {
   static A g;
   long x;
   protected void finalize() {
     g = this;
     long r1 = x;
     // ...
     }
   }
   Thread 1:
    A r2 = new A();
    r2.x = 1;
    r2.x = -1;
   Thread 2:
   do {
     r3 = A.g;
     } while (r3 == null);
   r4 = r3.x;
Are we guaranteed that r1 and r4 will both see the value -1?
At a intuitive level, before running the finalizer on an object o,
we need to make sure that if two conflicting writes w1 and w2
have been performed to a field/element of o, and w1 happens-before
w2, then we need to make sure that before the finalizer is run, the
write w1 becomes no longer accessible.
---Bill
------------------------------- JavaMemoryModel mailing list - http://www.cs.umd.edu/~pugh/java/memoryModel
This archive was generated by hypermail 2b29 : Thu Oct 13 2005 - 07:01:05 EDT