title: Not sure this usage of volatile makes sense, seems to have the same issue
body: <p>Reading here:</p>
  
  <p><a href="http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.3.1.4" rel="nofollow">JLS 8.3.1.4 volatile Fields</a></p>
  
  <p>Without <code>volatile</code> it says </p>
  
  <blockquote>
    <p>"then method two could occasionally print a value for <code>j</code> that is greater than the value of <code>i</code>, because the example includes no synchronization and"</p>
  </blockquote>
  
  <pre><code>class Test {
      static volatile int i = 0, j = 0;
      static void one() { i++; j++; }
      static void two() {
          System.out.println("i=" + i + " j=" + j);
      }
  }
  </code></pre>
  
  <p>With volatile is says </p>
  
  <blockquote>
    <p>"It is possible, however, that any given invocation of method two might observe a value for <code>j</code> that is much greater than the value observed for <code>i</code>, because method one might be executed many times between the moment when method two fetches the value of <code>i</code> and the moment when method two fetches the value of <code>j</code>."</p>
  </blockquote>
  
  <p>In behaves 'properly' with synchornization, but I'm confused as to what benefit <code>volatile</code> brings here?</p>
  
  <p>I thought <code>volatile</code> gaurantees the order is preserved, so I would have thought it SOME cases the value of i might be greater than <code>j</code>, but not the other way around since that implies the order of incrementing was changed.</p>
  
  <p>Is that a typo in the doc?  If not, please explain how <code>j</code> could be greater than <code>i</code> when using <code>volatile</code>.</p>