title: final vs volatile guaranntee w.rt to safe publication of objects
body: <p>From the book Java concurrency in practice :</p>
  
  <blockquote>
    <p>To publish an object safely, both the
    reference to the object and the
    object's state must be made visible to
    other threads at the same time. A
    properly constructed object can be
    safely published by:</p>
    
    <ul>
    <li><p>Initializing an object reference from    a static initializer</p></li>
    <li><p>Storing a reference to it into a     volatile field or AtomicReference</p></li>
    <li><p>Storing a reference to it into a  final field of a properly constructed 
    object</p></li>
    <li><p>Storing a reference to it into a     field that is properly guarded by a<br>
    lock.</p></li>
    </ul>
  </blockquote>
  
  <p>My questions are :</p>
  
  <ol>
  <li>What are the the differences between bullet points 2 and 3 ? I am interested in the difference between <code>volatile</code> approach and <code>final</code> approach in terms of safe publication of the object . </li>
  <li>What does he mean by final field <em>of a properly constructed object</em> in point 3 ? Before starting the bulleted points authors already mentioned that they are talking about a properly constructed object (which I assume is not letting the <code>this</code> reference to escape ). But once again why did they mention about properly constructed objects ?</li>
  </ol>