title: Callback with java multi thread
body: <p>I'm trying to multi thread an import job, but running into a problem where it's causing duplicate data. I need to keep my map outside of the loop so all my threads can update and read from it, but I can't do this without it being final and with it being final I can't update the map. Currently I need to put my Map object in the run method, but the problem comes when the values are not initially in the database and each thread creates a new one. This results in duplicate data in the database. Does anybody know how to do some sort of call back to update my map outside?  </p>
  
  <pre><code>ExecutorService executorService = Executors.newFixedThreadPool(10);
  
  final Map&lt;Integer, Object&gt; map = new HashMap&lt;&gt;();
  map.putAll(populate from database);
  for (int i = 0; i &lt; 10; i++) {
  
      executorService.execute(new Runnable() {
          public void run() {
  
          while ((line = br.readLine()) != null) {
              if(map.containsKey(123)) {
                  //read map object
                  session.update(object);                
              } else {
                  map.put(123,someObject);
                  session.save(object);
              }            
  
              if(rowCount % 250 == 0)
              tx.commit;
          });
  
  }
  
  executorService.shutdown();
  </code></pre>