title: concurrency using ExecutorService
body: <p>I have this simple program to count numbers from 1 to 9 using ThreadPool and ExecutorService.
  Each Thread is waiting for 1 sec to execute. However, below program gives me random output for each execution. </p>
  
  <p>How do I fix this so that it always produces 45?</p>
  
  <pre><code>public static void main(String[] args) throws InterruptedException {
      AtomicLong count = new AtomicLong(0);
      ExecutorService executor = Executors.newFixedThreadPool(10);
      List&lt;Integer&gt; list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
      for(Integer i : list) {
          executor.execute(new Runnable() {
              @Override
              public void run() {
                  try {
                      Thread.sleep(1000);
                  } catch (InterruptedException e) {
                      e.printStackTrace();
                  }
                  count.set(count.get() + i);
              }
          });
      }
  
      System.out.println("Waiting...");
  
      executor.shutdown();
      executor.awaitTermination(Long.MAX_VALUE, TimeUnit.MINUTES);
      System.out.println("Total::"+count.get());
  
      System.out.println("Done");
  }
  </code></pre>