<p>I agree with this.  However, another interesting scenario is if thread 1 sets the referent and then publishes the WeakReference via a data race, can thread 2 see the WeakRef as non-null but the referent as null or partially initialized? Referent is not final and I don't remember seeing any other barriers that can be piggybacked on in the constructor.  Unless the JVM does something internally, the JMM would allow this to happen.</p>

<p>Cheers,<br>
Vitaly</p>
<p>Sent from my phone</p>
<div class="gmail_quote">On Aug 7, 2012 9:54 AM, "Aleksey Shipilev" <<a href="mailto:aleksey.shipilev@oracle.com" target="_blank">aleksey.shipilev@oracle.com</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

On 08/07/2012 04:47 PM, Raph Frank wrote:<br>
<br>
> The documentation says that once an object has been determined to be<br>
> garbage collectable, "At that time it will atomically clear all weak<br>
> references to that object", so presumably, the get method can be<br>
> called, some if is atomically set to null?<br>
<br>
I think the real meaning behind that claim is "atomically set *all* weak<br>
references to that object", i.e. two weak references to the same object<br>
will simultaneously become clear once object is not reachable.<br>
<br>
Mutator threads are not modifying the referent, and so the real question<br>
should be: is it possible to read the non-null referent after weak<br>
reference is cleared? There is no difference how many user threads are<br>
accessing now, because the possible race is between mutator threads and GC.<br>
<br>
The answer to that is VM-specific. Common sense is that all GC<br>
operations should be committed before returning back to the mutator<br>
after stop-the-world, or notified to the mutator as soon as possible in<br>
concurrent GCs. If that wasn't true, WeakRefs would risk keep<br>
referencing the objects that are not really there, and it would broke<br>
too many applications already.<br>
<br>
-Aleksey.<br>
<br>
_______________________________________________<br>
Concurrency-interest mailing list<br>
<a href="mailto:Concurrency-interest@cs.oswego.edu" target="_blank">Concurrency-interest@cs.oswego.edu</a><br>
<a href="http://cs.oswego.edu/mailman/listinfo/concurrency-interest" target="_blank">http://cs.oswego.edu/mailman/listinfo/concurrency-interest</a><br>
</blockquote></div>