title: spring batch threads not returning after execution of main thread is complete
body: <p>I am novice to spring batch. I have created and successfully executed job from spring by using multiple threads and it works perfetly fine except that when program execution is complete, program flow does not comes to end/halt. i.e. even when the last statement of main method gets executed program does not exit. I am not sure whether it keeps on waiting for threads to complete or what. Can someone please advice on this ?
  "Below is my config file for job </p>
  
  <pre><code>&lt;bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"&gt;
              &lt;property name="corePoolSize" value="5" /&gt;
              &lt;property name="maxPoolSize" value="5" /&gt;
  &lt;/bean&gt;
  
  &lt;batch:job id="helloWorldJob" job-repository="jobRepository"&gt;
         &lt;batch:step id="step0" next="step1"&gt;
                  &lt;batch:tasklet ref="hello" transaction-manager="transactionManager" task-executor="taskExecutor" /&gt;
         &lt;/batch:step&gt;        
         &lt;batch:step id="step1"&gt;
                  &lt;batch:tasklet ref="world" transaction-manager="transactionManager" /&gt;
         &lt;/batch:step&gt;
  &lt;/batch:job&gt;  
  </code></pre>
  
  <p>And below is the launcher code </p>
  
  <pre><code>public static void main(String args[]) {
          try {
              new ClassPathXmlApplicationContext("simpleJob.xml");
  
              JobParametersBuilder builder = new JobParametersBuilder();
              builder.addString("Date", "12/02/2011");
              jobLauncher.run(job, builder.toJobParameters());
  
              JobExecution jobExecution = jobRepository.getLastJobExecution(job.getName(), builder.toJobParameters());
  
              System.out.println("\n\n"+jobExecution.toString());
              Thread.sleep(5000);
              System.out.println("End of execution ");
          } catch(Exception e) {
              e.printStackTrace();
          }
      }
  </code></pre>
  
  <p>As stated above, the code runs in 5 different thread for  the task "hello" and once for task "world" though it does not bring the execution of main program to halt even after the last line of main method "End of execution" gets executed.
  Any link white paper will greatly be appriciated.
  Thanks in advance
  Samir</p>