title: Java Synchronization Trouble
body: <p>I'm new to java and was trying out synchronization with a sample program to add numbers upto 100 using multiThreading. And following is code i was able to come up with. When i test the code it sometimes gives the correct value of 4590 but sometimes doesnt give the correct value. Can anyone point out what i'm doing wrong</p>
  
  <pre><code>class Counter{
      Integer counter = 0;
  
      public void increment(int i){
          synchronized (counter){
              counter += i;
          }
      }
  }
  
  class ObjectTest implements Runnable{
  
      int i;
      Counter blah;
  
      public ObjectTest(Counter counter,int i){
          blah =counter;
          this.i = i;
      }
      @Override
      public void run() {
          blah.increment(i);
      }
  }
  
  public class SyncTest {
  
      public static void main(String args[]) throws InterruptedException {
          ThreadPoolExecutor executor = new ThreadPoolExecutor(4,10,60, TimeUnit.SECONDS,new SynchronousQueue&lt;Runnable&gt;(), new ThreadPoolExecutor.CallerRunsPolicy());
          Counter counter = new Counter();
          for (int index = 0; index &lt; 100; index++) {
              ObjectTest objectTest = new ObjectTest(counter,index);
              executor.execute(objectTest);
          }
          executor.shutdown();
          while (!executor.isTerminated()){
              Thread.sleep(1000L);
          }
  
          System.out.println(counter.counter);
      }
  }
  </code></pre>