title: Spring @Scheduler parallel running
body: <p>I have the following 3 classes:</p>
  
  <p><em>ComponantA</em></p>
  
  <pre><code>package mytest.spring.test.spring;
  
  import org.apache.log4j.Logger;
  import org.springframework.scheduling.annotation.Scheduled;
  import org.springframework.stereotype.Component;
  
  @Component
  public class ComponentA {
  
      Logger log = Logger.getLogger(ComponentB.class);
  
      @Scheduled(fixedRate=2000)
      public void sayHello() {
          for(int i=1 ; i&lt;=5 ; i++) {
              try {
                  Thread.sleep(1000);
              } catch (InterruptedException e) {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
              }
              log.info("Hello from ComponentA " + i);
          }
      }
  }
  </code></pre>
  
  <p><em>ComponentB</em></p>
  
  <pre><code>package mytest.spring.test.spring;
  
  import org.apache.log4j.Logger;
  import org.springframework.scheduling.annotation.Scheduled;
  import org.springframework.stereotype.Component;
  
  @Component
  public class ComponentB {
  
      Logger log = Logger.getLogger(ComponentB.class);
  
      @Scheduled(fixedRate=2000)
      public void sayHello() {
          for(int i=1 ; i&lt;=3 ; i++) {
              try {
                  Thread.sleep(2000);
              } catch (InterruptedException e) {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
              }
              log.info("Hello from ComponentB " + i);
          }
      }
  }
  </code></pre>
  
  <p><em>MyApplication</em></p>
  
  <pre><code>package mytest.spring.test.spring;
  
  import org.springframework.boot.SpringApplication;
  import org.springframework.boot.autoconfigure.SpringBootApplication;
  import org.springframework.scheduling.annotation.EnableScheduling;
  
  @SpringBootApplication
  @EnableScheduling
  public class MyApplication {
  
      public static void main(String[] args) {
          SpringApplication.run(MyApplication.class, args);
      }
  }
  </code></pre>
  
  <p>When I execute it, I'm getting the following output:</p>
  
  <pre><code>Hello from ComponentA 1
  Hello from ComponentA 2
  Hello from ComponentA 3
  Hello from ComponentA 4
  Hello from ComponentA 5
  Hello from ComponentB 1
  Hello from ComponentB 2
  Hello from ComponentB 3
  Hello from ComponentA 1
  Hello from ComponentA 2
  Hello from ComponentA 3
  Hello from ComponentA 4
  Hello from ComponentA 5
  Hello from ComponentB 1
  Hello from ComponentB 2
  Hello from ComponentB 3
  ...
  </code></pre>
  
  <p>I need the 2 Scheduled methods to run in parallel, which is clearly not the cae according to the output I'm getting. I read that it should be possible to provide the @Schedule annotation with a custom TaskExecutor, with which it should be possible to define how many thread we want ...</p>
  
  <p>Am I right ? I can't find how to provide this information.</p>