title: Mutiple Threads: the application doesn't produce same result every time
body: <p>So here I write three simple class to inspect how multiple threads working in java, but they produce different result everytime I run it. Here is the code:</p>
  
  <pre><code>        public class Accum {
  
          private static Accum a = new Accum();
          private int counter = 0;
  
          private Accum(){}
  
          public static Accum getAccum(){
              return a;
          }
  
          public void updateCounter(int add){
              counter+=add;
          }
  
          public int getCount(){
              return counter;
          }
      }//end of class
  
          public class ThreadOne implements Runnable {
          Accum a = Accum.getAccum();
          public void run() {
              for(int x=0; x&lt;98; x++){
                  //System.out.println("Counter in TWO "+a.getCount());
                  a.updateCounter(1000);
                  try{
                      Thread.sleep(50);
                  }catch(InterruptedException ex){}
              }
              System.out.println("one " + a.getCount());
          }
      }//end of class
  
          public class ThreadTwo implements Runnable{
          Accum a = Accum.getAccum();
          public void run() {
              for(int x=0; x&lt;99; x++){
                  //System.out.println("counter in Two "+a.getCount());
                  a.updateCounter(1);
                  try{
                      Thread.sleep(50);
                  }catch(InterruptedException ex){}
              }
              System.out.println("two "+a.getCount());
      }
  
          public class TestThreaad {
          public static void main(String[]args){
              ThreadOne t1 = new ThreadOne();
              ThreadTwo t2 = new ThreadTwo();
  
              Thread one = new Thread(t1);
              Thread two = new Thread(t2);
  
              one.start();
              two.start();
          }
      }end of class
  </code></pre>
  
  <p>So the expected result would be : one 98098, two 98099, but it turns out that the results are just unpredictable, sometimes it would be 78000 or 81000, I don't know..</p>
  
  <p>but if i add some code to print a line of current value of count, the final result would be correct..</p>
  
  <p>I really have no idea what is going wrong, and even add the keyword synchronized in the ThreadOne and ThreadTwo, run() method, the problem is still there...</p>
  
  <p>I've studied the java for 3 months and this is the most elusive problem I've ever confronted...so thanks in advance for anyone could help me to understand the basic point of multiple threading...</p>