title: Volatile guarantee safe publication of a mutable object?
body: <p>By reading <strong>Java Concurrency in Practice</strong></p>
  
  <p>I can see:</p>
  
  <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>Initializing an object reference from a static initializer</li>
  <li>Storing a reference to it into a volatile field or AtomicReference</li>
  <li>Storing a reference to it into a final field of a properly constructed object</li>
  <li>Storing a reference to it into a field that is properly guarded by a
  lock.</li>
  </ul>
  
  <p>However, I am confused about the second idiom. Since <code>volatile</code> can only guarantee that the <strong>reference is visible to another thread</strong> but <strong>it doesn't  have synchronization of object construction which it refers to</strong>. So how can it guarantee that the mutable object is properly constructed, what is the thread that is constructing this object is interrupted by another thread? </p>